编辑:zone 投稿:苏克1900 摘要:爬虫过程中的行代反爬措施非常重要,其中设置随机 User-Agent 是码搞一项重要的反爬措施,Scrapy 中设置随机 UA 的行代方式有很多种,有的码搞复杂有的简单,本文就对这些方法进行汇总,行代提供一种只需要一行代码的码搞设置方式。 最近使用 Scrapy 爬一个网站,行代遇到了网站反爬的码搞情况,于是行代开始搜索一些反爬措施,了解到设置随机 UA 来伪装请求头是码搞一种常用的方式,这能够做到一定程度上避免网站直接识别出你是行代一个爬虫从而封掉你。设置随机 UA 的码搞方法有挺多种,有的行代需要好多行代码,有的码搞却只需要一行代码就搞定了,接下来就来介绍下。行代 首先,说一下常规情况不使用 Scrapy 时的用法,比较方便的亿华云计算方法是利用 fake_useragent包,这个包内置大量的 UA 可以随机替换,这比自己去搜集罗列要方便很多,下面来看一下如何操作。 首先,安装好fake_useragent包,一行代码搞定: pip install fake-useragent 然后,就可以测试了: UserAgent ua = UserAgent() ): print(ua.random) 这里,使用了 ua.random 方法,可以随机生成各种浏览器的 UA,见下图: (放大查看) 如果只想要某一个浏览器的,比如 Chrome ,那可以改成 ua.chrome,再次生成随机 UA 查看一下: 以上就是常规设置随机 UA 的一种方法,非常方便。 下面,我们来介绍在 Scrapy 中设置随机 UA 的几种方法。 先新建一个 Project,命名为 wanojia,测试的网站选择为:http://httpbin.org/get。 首先,我们来看一下,如果不添加 UA 会得到什么结果,可以看到显示了scrapy,这样就暴露了我们的云南idc服务商爬虫,很容易被封。 下面,我们添加上 UA 。 第一种方法是和上面程序一样,直接在主程序中设置 UA,然后运行程序,通过下面这句命令可以输出该网站的 UA,见上图箭头处所示,每次请求都会随机生成 UA,这种方法比较简单,但是每个 requests 下的请求都需要设置,不是很方便,既然使用了 Scrapy,它提供了专门设置 UA 的地方,所以接下来我们看一下如何单独设置 UA。 ] 第二种方法,是在 settings.py 文件中手动添加一些 UA,然后通过 random.choise 方法随机调用,即可生成 UA,这种方便比较麻烦的就是需要自己去找 UA,而且增加了代码行数量。 第三种方法,是高防服务器使用 fake-useragent 包,在 middlewares.py 中间件中改写 process_request() 方法,添加以下几行代码即可。 UserAgent ua = UserAgent() ] = ua.random 然后,我们回到 settings.py 文件中调用自定义的 UserAgent,注意这里要先关闭默认的 UA 设置方法才行。 DOWNLOADER_MIDDLEWARES = { , , } 可以看到,我们成功得到了随机 UA。 可以看到,上面几种方法其实都不太方便,代码量也比较多,有没有更简单的设置方法呢? 有的,只需要一行代码就搞定,利用一款名为 scrapy-fake-useragent 的包。 先贴一下该包的官方网址:https://pypi.org/project/scrapy-fake-useragent/,使用方法非常简单,安装好然后使用就行了。 执行下面的命令进行安装,然后在 settings.py 中启用随机 UA 设置命令就可以了,非常简单省事。 pip install scrapy-fake-useragent DOWNLOADER_MIDDLEWARES = { } 我们输出一下 UA 和网页 Response,可以看到成功输出了结果。 以上就是 Scrapy 中设置随机 UA 的几种方法,推荐最后一种方法,即安装 scrapy-fake-useragent 库,然后在 settings 中添加下面这一行代码即可: , 另外,反爬措施除了设置随机 UA 以外,还有一种非常重要的措施是设置随机 IP,我们后续再进行介绍。▌常规设置 UA
▌直接设置 UA
▌手动添加 UA
▌middlewares.py 中设置 UA
▌一行代码设置 UA