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

我请教一下,用Python 写爬虫时应该注意哪些坑
最新回答
考试的考试哪里才是假期

2024-11-07 05:16:55

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