抓取动态网页(2020年7月29日写在前面:右键打开源码找到iframe标签 )
优采云 发布时间: 2021-11-08 12:06抓取动态网页(2020年7月29日写在前面:右键打开源码找到iframe标签
)
时间:2020年7月29日
写在前面:本文仅供参考和学习,请勿用于其他用途。
1.嵌入式网络爬虫
示例:最常见的分页页面
这里我以天津的请愿页面为例,(地址:)。
右键打开源码找到iframe标签,取出里面的src地址
在src地址输入页面后不要停留在首页。主页网址通常比较特殊,无法分析。我们需要输入主页以外的任何地址。
进入第二个页面,我们可以找到页面中的规则,只需要改变curpage后的数字就可以切换到不同的页面,这样我们只需要一个循环就可以得到所有数据页面的地址,然后就可以了发送获取请求以获取数据。
2.JS 可加载网页抓取
示例:一些动态网页不使用网页嵌入,而是选择JS加载
这里我举一个北京请愿页面的例子()
We will find that when a different page is selected, the URL will not change, which is the same as the embedded page mentioned above.
右键打开源码,并没有找到iframe、html等内嵌页面的图标标签,但是不难发现放置数据的div里面有一个id,就是JS加载处理的明显标识。现在进入控制台的网络
执行一次页面跳转(我跳转到第3页),注意控制台左侧新出现的文件JS,找到里面加载新数据的JS文件,打开,会发现PageCond/begin: 18、 PageCond/length: 6个类似的参数,很明显网站根据这个参数加载了相关的数据,和post请求一起发送给网站,我们可以得到我们想要的数据。.
payloadData ={
"PageCond/begin": (i-1)*6,
"PageCond/length": 6,
"PageCond/isCount": "false",
"keywords": "",
"orgids": "",
"startDat e": "",
"endDate": "",
"letterType": "",
"letterStatue": ""}
dumpJsonData = json.dumps(payloadData)
headers = {"Host": "www.beijing.gov.cn",
"Origin": "http://www.beijing.gov.cn",
"Referer": "http://www.beijing.gov.cn/hudong/hdjl/",
"User-Agent": str(UserAgent().random)#,
}
req = requests.post(url,headers=headers,data=payloadData)