python爬取aqistudy网站数据

本文档记录了20200729的更新,指出AQISTUDY网站针对selenium爬虫采取了反扒措施,导致原先的Python爬虫程序无法正常获取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# /home/share/user/liaoqi/anaconda3/bin/python3.6

# Project: Local

# Author: ljh

# Create time: 2019-05-09 18:08

import time
from selenium import webdriver
import pandas as pd
from concurrent.futures import ProcessPoolExecutor
import urllib.request as request

import os


# 对中文城市名进行转义
def transport_city_name(city_name):
    return request.quote(city_name)


#  生成一段时间内的日期
def get_year_months(start_year, start_month, end_year, end_month):
    start_year, start_month, end_year, end_month = [int(i) for i in [start_year, start_month, end_year, end_month]]
    year_months = []
    if start_year < end_year:
        for year in range(start_year, end_year + 1):
            if year == start_year:
                if start_month > 12 or start_month < 1:
                    raise ValueError
                else:
                    for month in range(start_month, 13):</
<think>嗯,用户想用Spyder IDE来编写Python代码,从特定的网站抓取数据。首先,我需要确认用户的需求:他们想要从'https://www.aqistudy.cn/historydata/'这个网站爬取数据。这个网站可能包含空气质量的历史数据,用户可能需要这些数据进行分析或者其他用途。 接下来,我得考虑用户可能对爬虫不太熟悉,所以需要一步步引导。首先,应该检查网站是否有反爬机制,比如检查robots.txt,或者是否需要处理JavaScript渲染的内容。不过,先尝试用requests和BeautifulSoup这两个库来获取数据,因为它们适合处理静态页面。 用户提到使用Spyder IDE,所以需要确保他们安装了必要的库。可能用户已经安装了Python,但不确定是否有requests和BeautifulSoup。因此,在步骤中需要包括安装这些库的方法,比如通过pip install。 然后,编写代码的步骤。首先导入必要的库,然后发送HTTP请求获取网页内容。这里需要注意异常处理,比如添加try-except块来捕获请求错误,避免程序崩溃。接着,使用BeautifulSoup解析HTML,提取所需的数据。需要查看目标网页的结构,找到数据所在的HTML元素,比如表格、列表或者其他标签。可能需要使用find或find_all方法,以及CSS选择器来定位元素。 存储数据部分,用户可能需要将数据保存为CSV或者Excel文件,所以需要使用csv库或者pandas库。如果数据量较大,可能需要分页处理或者使用异步请求。但在这个初步的示例中,可能先提取部分数据,比如城市列表,然后逐步扩展。 另外,需要注意网站的合法性,遵守robots.txt的规定,以及设置合理的请求头,模拟浏览器访问,避免被封IP。可能需要添加headers,包含User-Agent等信息。 用户可能遇到的问题包括网页结构变化导致的选择器失效,或者网站需要登录才能访问数据。这时候可能需要更复杂的处理,比如使用Selenium来模拟浏览器操作,或者处理Cookie和Session。 最后,生成相关问题,帮助用户深入理解爬虫的其他方面,比如动态页面处理、数据存储优化、反爬策略等。确保回答覆盖了用户可能遇到的后续问题,并提供扩展学习的路径。</think># Python Spyder实现网页数据抓取步骤 ## 一、环境准备 1. 在Spyder中新建Python文件(Ctrl+N) 2. 安装依赖库(在Spyder控制台执行): ```python pip install requests beautifulsoup4 pandas ``` ## 二、基础爬虫代码实现 ```python import requests from bs4 import BeautifulSoup def fetch_aqi_data(): url = 'https://www.aqistudy.cn/historydata/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } try: response = requests.get(url, headers=headers, timeout=10) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') # 示例:提取城市列表 city_list = [item.text for item in soup.select('.city-list li a')] return city_list except requests.exceptions.RequestException as e: print(f"请求异常: {str(e)}") return [] if __name__ == "__main__": data = fetch_aqi_data() print(f"获取到{len(data)}个城市数据") print(data[:5]) # 显示前5个城市 ``` ## 三、关键功能解析 1. 请求头设置:`headers`参数模拟浏览器访问,避免被网站拦截[^2] 2. 异常处理:`try-except`块确保网络异常时程序不会崩溃 3. 数据解析:使用CSS选择器`.city-list li a`定位城市列表元素 ## 四、执行结果验证 1. 按F5运行脚本 2. 查看控制台输出应显示类似: ``` 获取到381个城市数据 ['北京', '上海', '天津', '重庆', '哈尔滨'] ``` ## 五、数据存储扩展 添加CSV保存功能: ```python import csv def save_to_csv(data, filename='city_list.csv'): with open(filename, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) writer.writerow(['城市名称']) writer.writerows([[city] for city in data]) ``` 在main函数中调用: ```python if __name__ == "__main__": data = fetch_aqi_data() if data: save_to_csv(data) print("数据已保存为city_list.csv") ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值