爬虫小结

写在开头

大部分的网站都是没有任何反爬措施的, 直接爬取即可获取数据.
部分网站会有一些反爬措施, 常见的反爬翻来覆去也就那几种.
对于一些较难的爬取的网站, 根据实际需求及预算来估算一下是否需要爬取.
包括但不局限于 IP, js加密, 验证码

所见非所得

大部分的网站都是所见即所得的, 但一些网站的页面内容是使用js来进行渲染的, 直接抓取的数据和看到的不太一样. 不一样的方式大致分为两种: 同步加载异步加载.

同步加载

http://xxgk.dingnan.gov.cn/bmgkxx/hbj/gzdt/gggs/index.htm

需求是获取表格中的数据 信息索取号 类 别 信息名称 生成日期 公开方式 公开时限

浏览器打开页面, 通过f12查看页面, 部分内容如下

可以看到, 里面是有一个a标签的, 查看源网页, 发现并没有这个a标签

通过爬虫获取的数据也是没有这个a标签的, 这时候就需要对script标签中的文本内容进行解析了, 通过,来进行分割获取信息


上面说的只是其中的一种, 其它的和这种类似, 较老的网站最容易遇到这种情况了.

当定位不到元素时, 就需要查看一下网页源代码了

异步加载

http://hbj.jxfz.gov.cn/col/col4374/index.html?uid=14940&pageNum=1

异步加载也有getpost, 相对来说, 一般是get简单

这个网页里面的内容是通过post来请求的, 返回的数据也是需要进行简单处理的
https://www.w3school.com.cn/xml/xml_cdata.asp

返回的数据包含在注释中, 需要先把注释取消掉, 再进行信息的提取

        res = response.text.replace('<![CDATA[', '').replace(']]>', '')
        data_xml = Selector(text=res)
        datas = data_xml.xpath("//record")

遇到带有类似csrf_token的值时, 需要先获取这些隐藏输入框的值, 在进行post请求

参考网址 http://www.pxedz.gov.cn/info/index.aspx?t=34

调试这个网站时浏览器可能会卡死

        inputs = response.xpath('//form[@id="aspnetForm"]//input[@type="hidden"]')
        for input_ in inputs:
            name = input_.xpath('./@name').get()
            value = input_.xpath('./@value').get()
            self.datas.update({name: value})

猜你喜欢

转载自www.cnblogs.com/gaoyongjian/p/11571897.html
今日推荐