Python爬虫 - 解决动态网页信息抓取问题

2020-07-30 15:10:51 浏览数 (1)

作者:明天依旧可好 时间:2020年7月29日

写在前面:本文仅供参考学习之用,请勿用作其他用途。

1.嵌入式网页爬取 举例:最常见的分页式网页

这里我用天津市的信访页面来做示例,(地址:http://www.tj.gov.cn/zmhd/zmljl0524/wywtwqz/)。

右键打开源码找到iframe标签,拿出里面的src地址http://zm.tj.gov.cn/gov_open/question/zero/list8a.jsp

进入src地址中的页面后不要停留在首页,首页网址通常是比较特殊的,分析不出来规律,需要我们进入首页外的任一地址

进入第二页,我们便可以发现页面中的规律,仅仅只需要更换curpage后的数字就可以切换到不同的页面,这样一来,我们只需要一个循环就可以得到所有数据页面的地址,接下来发送get请求获取数据即可。

http://zm.tj.gov.cn/gov_open/question/zero/list8a.jsp?curpage=2&rows=15&deptId=1002000000000000

2.JS加载型网页抓取 举例:有些动态网页并没有采用网页嵌入的方式,而选择了JS加载

这里我举例的是北京市的信访页面(http://www.beijing.gov.cn/hudong/hdjl/com.web.search.replyMailList.flow) 我们会发现当选择不同页面时,网址并不会发生变化,这点和上面说的嵌入式页面一样。

右键打开源码,没有发现iframehtml等嵌入式页面的标致性标签,但是我们不难发现在放有数据的div中有一个id,这是JS加载处理的一个明显标识。现在进入控制台的Network

进行页面跳转(我跳转到了第3页),注意观察控制台左方新出现的文件JS,在里面找到加载新数据的JS文件,打开它会发现PageCond/begin: 18PageCond/length: 6类似的参数,很明显网站就是依据这个参数来加载相关数据的,将它随着post请求一下发送给网站,就可以得到我们想要的数据了。

代码语言:javascript复制
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)

0 人点赞