使用Python和Selenium进行多线程网页爬虫时偶尔报错的原因是什么?

多线程分析器,远程调试端口冲突,直接清除参数。
删不掉吗?每个线程使用不同的端口。
不要忘记更新 Selenium 和驱动程序。
线程安全取决于你。
只需要解决端口问题即可。

Python爬虫实战,Python多线程抓取5千多部最新电影下载链接

不知道Python爬虫?这篇文章丢给他(内含框架结构)

说实话,刚开始做爬虫的时候,我觉得太神奇了。
着着数据一行行飘到终端,当时心里就咯噔一下——这特么也太酷了。
现在回想起来,爬虫的核心只是由几个点组成,但是每个点内都有一条路。

以Scrapy为例。
去年我承担了爬取一个特别反爬的金融网站的任务。
如果直接使用Requests,肯定会被ban,但是Scrapy的中间代理下载+IP中间件轮转,结合用户代理随机化,实际上跑了三个月没有任何问题。
有趣的是,Scrapy 的异步模型特别适合这种高并发场景。
在调试时,我发现当Scheduler的队列中积压的URL达到2 000个时,CPU增加到9 0%——这提醒我,爬虫不只是爬行,它还需要能够“管理队列”。

我没有广泛使用Portia可视化工具,但去年,当我帮助邻居的团队调整新闻爬虫时,我发现它内置的模式匹配算法非常有趣。
这些编辑根本不懂规律性,但用Portia拖拽一些元素却可以破坏凤凰网、财新网文章的结构。
当然,这背后是Scrapy强大的选择机制。
我见过有人用Portia扫知乎栏目,但是回复区和评论区被一起去掉了,数据乱七八糟,查看方便,但原理需要了解。

Selenium控制器我踩过坑。
去年,当我使用Selenium扫描一个需要登录和验证码的社保系统时,我只是使用ChromeDriver来连接代理。
但是有一个使用IE1 1 的客户端系统,报各种奇怪的错误。
后来我发现我必须使用Microsoft Web Driver,并且必须手动下载与系统版本相对应的Web Driver——这让我意识到浏览器兼容性是爬虫的“深水区”。
我有一个朋友写了一个Selenium脚本,居然把其他银行的动态验证码当成普通图片处理,结果被风控了三个月。

PySpider 的 WebUI 非常易于使用。
我在教实习生的时候经常用它来教学。
记得曾经有一个学生用PySpider爬取豆瓣电影,结果把用户评论误认为是电影信息,最后的数据集完全乱了。
我修改了 Item Pipeline 代码的几行,并添加了一个函数来将电影名称与正则表达式相匹配。
第二天学生交作业时,他问我为什么他比我准确——其实原因很简单,数据结构是正确的。

但最让我担心的是防蠕变机制。
两年前我拜访过一家医药电商,对方使用的是设备指纹。
我硬着头皮跑了反爬,发现服务器直接查数据库,IP、User-Agent、UA Hash、屏幕分辨率、时区、HTTP Referer都作为特征值。
当时我直接怀疑人生了,觉得爬虫的工作是不可能的。
接下来,我继续协程异步扫描和我配合Redis缓存状态,所以勉强开始工作。

说到底,爬虫这东西就像钓鱼。
你不需要只有一根鱼竿,你需要知道鱼在哪里,它们喜欢吃什么,水有多深。
我建议初学者从 Scrapy 开始,但不要拘泥于框架本身,而是了解它如何与 Requests 和 BeautifulSoup 等库协作。
我看到有人写了一个Scrapy爬虫,但是最后却利用了Requests的手动重试机制,让对方的服务器崩溃了。
最后,还是框架太弱了:说实话,Scrapy 处理不了这种问题。