用Python 写爬虫时应该注意哪些坑

 我来答
Xz72ky1
2017-03-18 · 超过83用户采纳过TA的回答
知道答主
回答量:377
采纳率:0%
帮助的人:70万
展开全部
1. 爬个别特定网站,不一定得用python写爬虫,多数情况wget一条命令多数网站就能爬的不错,真的玩到自己写爬虫了,最终遇到的无非是如何做大做壮,怎么做分布式爬虫。scrapy这种价值接近0,异步或者多线程搞抓取,选一个成熟的基于磁盘的队列库,kafka之类的,scrapy帮了啥看
2. http库众多,还有gevent库monkey patch以后coroutine的玩这一选择,规模千万的话urllib3很好。
3. 对付网站的诸如登录、ajax,这种不过是体力民工活,不展开了。
4. 速度很重要,放ec2或者国内的云上跑,很重要的指标是你每一亿网页爬下来成本多少,爬的时候比如4核一个虚拟机节点,你能inbound用足100mbps吗。
5. beautifulsoup太慢,全网的爬,encoding的分析也要要快,c实现的chardet还行

最关键的,永远是爬下来以后的信息的提取、分析、使用,就是另外一个话题了。
1.学会使用chrome浏览器查看通信以及查看元素格式
2.增加User-Agent, 这是最简单的反爬措施了
3.写爬虫最好使用Ipython,在交互式的环境下,可以时刻了解自己问题具体出在哪里
4.使用requests
5.用get或者post下好html之后,要确认你需要的东西html里面有,而不是之后用ajax或者javascript加载的。
6.解析的话,BeautifulSoup不错。对于少数非常特殊的,可以考虑用re。
7,需要大量采集数据的话,学会使用框架,比如scrapy。
进阶:
加入网站需要模拟登陆,里面使用了很多ajax或者javascript,或者反爬虫厉害,用requests的session,注意F12查看到底发送了什么数据。
实在不会,就使用模拟浏览器吧,推荐selenium,虽然速度慢点,内存多点,但是真的很省力,而且基本查不出来。
最后,爬虫速度不要太快,加上time.sleep(1),尽量少用多线程,别人建站也不容易,(尤其是小站)你不给别人带来很大的麻烦,别人也就睁一只眼闭一只眼了,否则封IP不是好玩的。

有些页面喜欢使用redirect,然而requests的get和post方法中默认是直接跳转的!很可能你就带着错误的cookies和headers跳转了,所以务必将allow_redirects参数设为false
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式