如何用爬虫下载武汉市环保局空气污染数据?

理由
举报 取消

毕业季,需要用到这方面的数据,单独一页一页的复制了一段时间的数据,发现很是耗时,想从武汉市环保局下载这将近三年的历史数据。选择日期后,页面出现一个相应的数据表格,需要将这个表格全部保存。页面如下:跪谢各位!

2018年2月12日 2 条回复 997 次浏览

发起人:

回复 ( 2 )

  1. 段小草
    理由
    举报 取消

    这个问题不算麻烦,中午休息的时间简单调试了一下。我把步骤、代码和一个月的数据 demo 贴上,希望题主有一定的基础,然后能自己把需要的所有数据跑出来。

    最后给出的完整代码修改起止日期以后应该是能直接使用的。我中间有短暂地无法访问这个网站,所以在运行的时候最好不要一次跑太长的日期跨度,最好是 3~6 个月的数据这样跑吧。

    我们由内向外地来看待这个问题,想要获取三年的历史数据,自然要从获取某一天入手,然后再批量化地获取很多天的数据。获取到数据以后为了方便后续处理,我们可以将其保存到一个 excel 的表格里面。

    所以我们要做的就是请求页面-解析页面-保存数据,相应用到的库分别是:

    Python3

    requests

    beautifulsoup

    xlwt

    (上面三个库在装完 Python3 后都可以直接用 pip install 命令安装)

    网页不复杂,也不需要模拟登陆,下面简单分析一下。

    这个页面里没有找到我们需要的数据,观察以后发现中间的表格部分写在一个<iframe>标签里,打开这个链接,跳转到表格页面。

    随便修改一个日期,观察浏览器的请求情况。如图。

    可以看到,浏览器用一个 post 方法,提交的数据是日期和页数。这个过程就很简单了。

    import requests
    def get_html():
        global h
        s = requests.session()
        url = 'http://www.whepb.gov.cn/airSubair_water_lake_infoView/v_listhistroy.jspx?type=0'
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0',
            'Referer':'http://www.whepb.gov.cn/airSubair_water_lake_infoView/v_listhistroy.jspx?type=0',
            'Host':'www.whepb.gov.cn',
            'Cookie':'	JSESSIONID=C7DC84CE4FF191ADB582B6C8D39F0749.tomcat; JSESSIONID=C7DC84CE4FF191ADB582B6C8D39F0749.tomcat; clientlanguage=zh_CN',
            'Connection':'keep-alive',
            'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
            'DontTrackMeHere':'gzip, deflate',
            'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
        }
        dt = {'cdateEnd':'2014-07-03','pageNo1':'1','pageNo2':''}
        r = s.post(url, data=dt, headers=headers)
        h = r.content.decode('utf-8')
    
  2. sumBug
    理由
    举报 取消

    对于这种简单的数据抓取需求,有很多可视化的数据抓取工具,动动鼠标就行,入门几分钟。自行搜索八爪鱼、火车头采集等。

我来回答

Captcha 点击图片更换验证码