Python-Scrapy抓取中国空气质量全站数据-ChinaArea案例

本文介绍了如何使用Scrapy和selenium抓取中国各城市空气质量指数的日历史数据。首先分析了网页结构,发现除了第一个静态页面外,其他页面需要动态抓取。接着,详细阐述了抓取思路及代码实现,包括items.py、spider.py、middlewares.py、pipelines.py和settings.py的设置。最后展示了抓取过程和结果。
摘要由CSDN通过智能技术生成

本节知识点主要是Scrapy对接selenium

目标抓取每个城市空气质量指数日历史数据

  1. 分析网页数据结构
    1.1. 一级域名页面
    一级域名页面
    1.2. 爬虫起始页面
    抓取起始页面
    1.3. 从上图随便点个城市链接进去,找到月份链接
    白城的空气质量不咋滴
    1.4. 这是我们需要抓取的数据字段 加上城市的字段一共有十个了.
    找到我们需要爬取的数据字段

  2. 分析网页数据格式
    2.1. 第一个页面为静态
    第一个页面
    静态页面

2.2. 第二个页面为动态页面
第二个页面
动态页面

2.3. 第三个页

爬取空气质量检测网的部分城市的历年每天质量数据 思路----------------------------------------- 从某城市的空气质量网页获取某市每月的链接,再爬取每个月的表格数据。连云港市:https://www.aqistudy.cn/historydata/daydata.php?city=连云港 连云港2014年5月的空气质量:https://www.aqistudy.cn/historydata/daydata.php?city=连云港&month=2014-05 遇到的问题----------------------------------------- 获取的网页中的表格数据隐藏,尝试requests无法获取。判断可能是动态加载的网页 尝试----------------------------------------- 1. 通过XHR,js查找隐藏数据的加载网页,没有找到。 2. 使用phantomjs.get() result=pd.read_html ,可以获得隐藏的表格数据,但是并不稳定,只是偶尔出现加载的表格数据,无法大规模的获取 解决方法----------------------------------------- 查找资料得知这个网站的表格数据在Console里的items中, 使用selenium的webdriver.firefox(),driver.execute_script("return items") 数据可获得。 仍遇到的问题:----------------------------------------- 爬取一个网页可获得数据,但是连续的获取网页,会出现两个错误。 1.Message: ReferenceError: items is not defined 2.connection refused 解决方法: 1.connection refused问题,可能是网页开太多,使用driver.quit() 2. 如果 execute_script 还是出错,可尝试pd.read_html获取信息。之前用phantomjs获取的时候输出空的表格,可能由于加载不够,用 Waite直到table出现之后再获取网页 Element=wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[3]/div[1]/div[1]/table/tbody"))) 3.之后出现偶尔出现输出为空,使用循环,如果输出表格为空,再重新获取。 if len(result)>1: filename = str(month) + '.xls' result.to_excel('E:\python\案例程序\data\\' + filename) print('成功存入'+filename) driver.quit() else: driver.quit() return getdata(monthhref,month)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值