1、建议
  • 1、简单的一些静态网站可以直接看Chrome里面的Network请求分析获得数据。
  • 2、还有一些动态的网站ajax请求,可以借助一些工具进行分析,或者用selenium模拟浏览器行为也行。
2、爬取步骤及思路
  • 1、确定要爬取的目标数据,逆向推理分析网站结构,选择获取页面详情的最优路径:
    • (1)逆向推理分析网站结构:通过目标数据,逐步分析祖辈的url链接(ps:一般对首页的url进行get请求,会得到一些需要的cookie参数)。
    • (2)选择获取页面详情的最优路径: 一个页面可能有多个路径可以到达,在保证能够拿到全量数据的情况下,优先选择请求次数少的路径。比如如下图片中,可以按三种性质查询获得数据,通过分析,按地区总省查询就能获得全量数据。
      网站爬取思路总结
  • 2、借助工具(如谷歌浏览器自带的谷歌开发者工具、mitmproxy抓包工:具、postman测试数据等),分析请求和响应(ps:并不是所有工具都必须一起使用,如果通过第一个就可以分析获得所要的数据,那么后面就不用使用那些工具了)。
    • 谷歌开发者工具确定具体返回数据的url;mitmproxy查看隐藏的请求头信息,测试url请求参数的关键性;postman验证以上分析的请求
    • (1)谷歌开发者工具:详细介绍见:https://www.html.cn/doc/chrome-devtools/https://leeon.gitbooks.io/devtools/content/ ; 通过打开谷歌开发者工具(鼠标右击检查),去查看哪个url能够返回数据,它的请求方式是什么,需要携带哪些参数,而这些参数往往影响的就是返回的数据的多少,拿最简单的说,比如有的链接携带了page参数,那就是翻页获得每页的数据。网站爬取思路总结
    • (2)mitimproxy抓包工具,具体使用见 https://blog.csdn.net/weixin_43411585/article/details/89211823 ;通过mitmproxy可以查看在谷歌浏览器当中隐藏的一些请求头信息;也可以通过修改链接的参数进行测试,获得一个请求链接的关键参数,哪些是必须的,比如缺少了这个关键参数后,返回的网页数据就缺失了;还可以通过查看一个个请求链接,查看从哪个链接开始出现了哪些参数,进而呈现了所请求的参数。
      网站爬取思路总结
    • (3)Postman验证前面自己分析的结果;使用方法见 https://www.jianshu.com/p/46d44c09d94c ;包括一些注意事项:https://www.jianshu.com/p/2bb34ab68bc3 ;比如我通过Chrome开发者工具或者mitmproxy确定了可以返回数据的url是什么,它是请求方式,它需要带的参数,它的请求头信息;这时候就可以把这些数据放到postman里面去测试验证一下,是不是真的能够返回数据。
      网站爬取思路总结
  • 3、针对反爬制定处理方法;有的网站具有反爬,诸如user-agent和referer检测,cookie反爬、验证码反爬、IP限频次,包括一些由网页javaScript生成的隐藏参数的动态改变加密等。
    • (1)对于user-agent:创建一个列表,每次请求随机替换 https://github.com/Shirmay1/Python/blob/master/Proxyip/useragent.py
    • (2)referer检测,把请求头里面的refer放进去,主要告诉它我们是从哪个页面访问开始的
    • (3)对于cookie反爬,cookie有两种方式生成,一种是浏览器请求,服务器返回响应中set-cookie而得的;另一种就是该网站里面写的代码如javascript生成的cookie。前者可以通过requests请求,response.cookies获得cookie;后者就比较麻烦,你可以要回到Chrome开发者工具里面去找到生成cookie的js文件,把它保存到本机生成cookie信息。
      网站爬取思路总结
    • (4)对于验证码反爬,那就要**验证码啦,可以自行百度看看**验证码的思路;当然有的链接图片的验证码是动态变化的,这时候可以携带cookie参数试试,或者其他必要的参数,保持请求的一致性。
    • (5)IP限制频次,一个是爬的慢一点,或者每隔一段时间休息一下,再继续爬,模拟的像一个正常用户的访问;第二个是加代理,用代理ip进行访问。
    • (6)等等………………
  • 4、编写代码,调试bug,获取数据

相关文章: