返回介绍

12.3 设置随机用户代理和 IP 代理

发布于 2025-04-21 19:15:29 字数 3951 浏览 0 评论 0 收藏

上节介绍了下载器中间件,这节介绍如何通过下载器中间设置随机用户代理和 IP 代理。

12.3.1 设置随机用户代理

应对反爬虫-使用用户代理

既然要设置随机 User Agent,首先要准备一批可用的 User Agent(可以从网上搜索一批),为了便于统一更改设置,将这些 User Agent 以列表的形式添加到项目的 settings.py 文件中。

USER_AGENTS = [
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN)  
AppleWebKit/523.15 (KHTML, like Gecko,  
Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)", 
    "Mozilla/5.0 (X11; U; Linux; en-US)  
AppleWebKit/527+(KHTML, like Gecko, Safari/419.3)  
Arora/0.6", 
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;  
rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1", 
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9)  
Gecko/20080705 Firefox/3.0 Kapiko/3.0", 
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5", 
    "Mozilla/5.0 (X11; U; Linux i686; en-US;  
rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 
Kazehakase/0.5.6", 
    "Mozilla/5.0 (Windows NT 6.1; WOW64)  
AppleWebKit/535.11 (KHTML, like Gecko)  
Chrome/17.0.963.56 Safari/535.11", 
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3)  
AppleWebKit/535.20 (KHTML, like Gecko)  
Chrome/19.0.1036.7 Safari/535.20", 
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8;  
U; fr) Presto/2.9.168 Version/11.52", 
] 

这里只是简单演示,用户可以搜索更多的 User Agent 添加进来。

下面编写中间件。在房天下爬虫项目中找到 middlewares.py 文件,在这个文件中编写随机变换 User Agent 中间件。

进入项目的 middlewares.py 文件,可以看到这里面有一个默认生成的 Pachong3SpiderMiddleware 中间件类,不用管它。引入 UserAgentMiddleware 中间件,自定义的随机更换 User Agent 中间件就是在这个中间件基础上,重写 processrequest 方法得到的。在重写的 process-request 方法中使用 random.choise 从前面定义的用户代理列表中随机选取一个 User Agent 来使用。

导入需要的包,把定义的 USER_AGENTS 列表从 settings.py 文件中引入进来。

import random
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware 
from pachong3.settings import USER_AGENTS

下面开始定义随机 User Agent 类。这里最关键的步骤就是重写 process-request 这个方法,通过这个方法随机地设置了 request 中 headers 的 User Agent。

class RandomUserAgent(UserAgentMiddleware):
    def process_request(self, request, spider): 
        ua = random.choice(USER_AGENTS) 
        request.headers.setdefault('User-Agent', ua)

保存定义好的 middlewares.py 文件,然后在 settings.py 文件中关闭 Scrapy 默认的 User Agent 中间件并启用自己定义的中间件,这样就完成了所有的配置。

DOWNLOADER_MIDDLEWARES = {
'pachong3.middlewares.RandomUserAgent': 543, 
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,  
} 

启用自定义中间件的写法为“pachong3.middlewares.RandomUserAgent': 543”,前面部分就是我们定义的类的路径,也就是在 pachong3 文件夹下面的 middlewares.py 模块中的 RandomUserAgent 这个类,因此我们的写法是使用点连接起来组成一个路径字符串,作为字典的 key;后面的值是中间件的执行顺序,必须是 0~1000 的整数值。

12.3.2 设置随机 IP 代理

应对反爬虫-使用代理 IP

设置随机变换的 IP 代理可以说是应对反爬虫的利器,尤其对大型爬取任务,设置随机变换的 IP 代理能起到比较好的反爬虫作用。但是免费而又稳定的代理 IP 很少,大部分免费代理 IP 极其不可靠,很可能短时间内不能用了。在处理大型爬虫时,最好购买商业的代理 IP,相对可靠,能减少维护爬虫的工作量。

现在设置随机 IP 代理。还是从西刺代理上选取几个代理 IP 作为例子,在读者看到这里的时候,如果这几个 IP 估计不能用了,可以重新找几个做练习。

第一步,在 settings.py 中写入代理 IP 列表。列表中的元素是字典形式,其 value 就是我们找到的代理 IP。

IPPOOL = [
{'ipaddr':'http://39.69.15.245:53281'}, 
{'ipaddr':'http://219.138.58.243:3128'} 
] 

第二步,进入项目的 middlewares.py 文件,编写随机更换代理 IP 的类。

首先导入 settings 中的代理 IP 列表和 HttpProxyMiddleware 类。

from scrapy.contrib.downloadermiddleware.httpproxy
import HttpProxyMiddleware 
from pachong3.settings import IPPOOL 

然后定义我们自己的更换代理 IP 类。

class MyproxiesSpiderMiddleware(HttpProxyMiddleware):
      def process_request(self, request, spider):   
          thisip = random.choice(IPPOOL)    
request.meta["proxy"] = thisip["ipaddr"] 

第三步,在 settings 中启用我们定义的类并关闭 Scrapy 内置的 HttpProxy Middleware。

DOWNLOADER_MIDDLEWARES = {
'pachong3.middlewares.MyproxiesSpiderMiddleware': 100, 
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,  
} 

这样就完成了设置随机 IP 代理。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。