1.爬虫的目的
获取网上的一些信息,并且做出一定分析,以达到我们工作中的需求
2.爬虫的两种分类
- 通用爬虫 : 通常指搜索引擎的爬虫, 像百度搜索这些
- 聚焦爬虫 : 针对特定的网站的爬虫
3. 一个爬虫程序的构建思路
-
获取url地址
对于数量不多的,可以构建url列表,但大多情况下,还是很多的.因此我们要目前分组,比如获取某图书商店的信息,要对图书种类进行分类,获得他们的url地址,然后在进去该分类中的列表页获取该列表页下一页地址.
通常麻烦的就是翻页的问题了,如果好的话,可以直接在翻页出找到url地址,如果没有的话,是通过js生成的,我们就需要去 Network查找了.
这种通过js生成的, 发送ajax请求数据, 获得的json数据,所以,我们需要观看请求头中,是否有需要携带的格外参数. -
发送请求
要考虑是否需要携带参数,是否需要ip池
分布式爬虫里面,通过redis放url地址,来实现分布式爬虫 -
获取数据
这里需要注意的就是编码格式了, 我每次做到这里, 都会先print一次,看看数据对不对,是不是我想要的( 不过爬虫还是太难的,因为我发现我看的好多案例,现在已经不能用了,好多网站已经反爬很厉害了,哎,对我们这些新手来说,太不友好了 )
获取数据的主要方式: (编码格式要注意)
json数据的话,使用requests模块在content中, scrapy是在body中
xpath, 当数据在Elements和请求体中一样时,可以用,我个体是挺喜欢xpath的.
通过re正则表达式请求, 比如获得当前页的page,来构造next_url,这种情况我用的挺多的 -
处理数据
处理数据的话, 就是在数据保存的mongodb中, redis也可以, 然后就是做一些数据的分析.
4.总结初学spider的心得
一定要稳住,游览器能搞定的事情,我们也能搞定,print是申请,当你很奇怪的时候,拿不到数据的时候,你print一个response的body,你会发现,哈哈你被反爬了.
那么先想想看,
是不是请求时候,少了什么参数?
是不是需要构建一下ip池?
是不是在请求时候,需要验证码了?(老是说,我遇到过,都是我还是现在构建ip池,来解决了需要验证码的问题)
是不是需要使用一下selenium(但是他真的很慢,有时候因为网络慢,这个延时的时间,真的不好把握, 毕竟快一点嘛)
或者说, 可以考虑一下程序设1分钟只能爬几次?
~~