Python爬虫
针对python爬虫这块,最近写了有大大小小三个项目,遇到几个难点,下篇总结出来,这里先写下我总结的爬虫爬取步骤.
静态文件:
针对静态文件的爬取,列如图片之类的,一般网站都保存在CDN上,需要先从网页上获取图片地址就好了,需要注意下保存的格式,有可能会导致图片无法打开的问题(一般保存为png格式内容).
数据:
爬虫解决打就是数据源的问题,是数据处理,数据分析之类的先行问题.所以更多的还是需要爬取数据的更多一些.
针对网页显示数据的问题,有些是直接放在网页源代码中,有的是由请求返回的json格式中(前后端分离开发的),还有的是js加密来的(解密的话,可能需要掉些头发).针对各种数据渲染方式,我们可以采用不同的爬取方式.
1.对于在html代码中的数据
有的网站的数据是放在网页源代码中,我们只需要采用python的requests模拟访问请求就可以获取到响应.得到的响应就是完整的html网页代码,这是我们只需要使用解析器解析提取数据就可以了.以下是三种常见的解析方法.
个人使用xpath较多,简单快捷.
以下四种解析器:
2.对于返回的json数据
现在很多网站是前后端分离开发(瀑布流网站,翻页之类的),我们可以采用抓包的方法,分析得到正确的请求地址和参数,然后模拟请求,得到json数据,再进行处理就好了.
3.js加密的数据
对于这类网站数据,可以**其加密的方式来获取数据.但是不推荐,首先,**很费时间,而且别人不定时更改加密方式,这样的话,不适用于长久爬取,你需要从新更改代码.相当麻烦.一般采用selenium模拟浏览器的行为完成数据采集,不过这样阻塞,代码执行效率低.
步骤:
- 一般遇到一个爬虫需求,我们可以先打开网站,查看下源代码,发现数据是否在源代码中,或者是某个请求的返回的json数据中.
- 在观察了网站后,我们可以获取到数据的请求地址,接下来我们可以先模拟一个requests请求,测试下是否有数据,或者是否有反爬措施.再进行针对反爬的响应措施(请求头,参数,ip代理之类的).
- 针对某些只能登陆后才能请求到的数据,那么我们需要先获取到cookie.这里可能会涉及到对验证码的处理,最近处理过苏宁,京东的滑块验证码和数字验证码,会在下一篇谈到
- 对于js加密的数据,可以简单分析下js加密的逻辑,如果太复杂,或是加密方式变化周期短,建议采用selenium,简单,粗暴,但是切记,不要一开始就使用selenium爬取,先测试下,不要动不动就上selenium
- 接下来,拿到数据就可以进行数据分析,pandas这个库可以很好满足大部分需求