赞
踩
除了一些比较常规的网页,还存在一些结构更复杂的网页,通过分析学习,提升爬虫技术。
想爬取广州交通信息网中关于重点区域路况的内容
通过F12查看页面元素,觉得可以实现抓取,结果实操时发现了问题
- response = requests.get(url, headers=headers)
- json = response.content.decode()
返回的信息中并没有任何有关数据,一查看才知道,网页用了iframe嵌套页面
由于iframe标签中含有src属性,再次对新url进行requests,还是以失败告终,只抓取到字段,而值却没有显示
没有数据,考虑可能是异步加载数据。点击F12,选择NetWork下的XHR,刷新页面
打开第一个页面,结果找到了数据
由此找到了最终爬取的页面网址(重点区域、重点通道的数据都在这里
找到实际爬取的页面后,用json提取就能获取想要的数据了。
- import requests
- import json
-
- def parse_ajax_web():
- url = 'http://219.136.133.162/gztraffic/GetData.ashx?__r='
- #请求头信息
- headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",
- 'x-requested-with': 'XMLHttpRequest'
- }
-
- response = requests.get(url, headers=headers)
- myjson = json.loads(response.text)
- return myjson
注:网站每五分钟更新一次数据,需要全天数据的话就每隔五分钟抓取一次。
- field_format = '{0:{4}^7}\t{1:{4}^4}\t{2:{4}^4}\t{3:{4}^4}'
- value_format = '{0:{4}^7}\t{1:^9}\t{2:{4}^4}\t{3:^7}'
- field_format = '{0:{5}^17}\t{1:{5}^4}\t{2:{5}^3}\t{3:{5}^4}\t{4:{5}^5}'
- value_format = '{0:{5}^17}\t{1:{5}^4}\t{2:{5}^3}\t{3:{5}^7}\t{4:{5}^7}'
链接:获取高德地图路况信息⭐
其他:百度道路信息爬取
XHR,全称为XMLHttpRequest,用于与服务器交互数据,是ajax功能实现所依赖的对象。XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 可以同步或异步地返回 Web 服务器的响应,并且能够以文本或者一个 DOM 文档的形式返回内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。