python爬虫十二:middlewares的使用,爬取糗事百科

本文介绍如何在Scrapy框架中使用随机User-Agent和IP代理来避免被目标网站封禁。通过自定义中间件实现随机选取User-Agent及IP代理,有效降低爬虫被发现的风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:https://zhuanlan.zhihu.com/p/26701898

1.项目结构    

2.user-agent的代理

# -*- coding: utf-8 -*-
'''
自定义scrapy框架的
user-agent头
从一个被良好维护的user-agent列表里
随机筛选合适的user-agent
防止封锁
'''
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

import random



#一个不容易被封锁的user-agent列表
agents = ['Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
              'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
              'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)']

class RandomUserAgent(UserAgentMiddleware):
    def process_request(self,request,spider):
        '''
        定义下载中间件,
        必须要写这个函数,
        这是scrapy数据流转的一个环节
        具体可以看文档:
        http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/downloader-middleware.html
        '''
        ua = random.choice(agents)
        request.headers.setdefault('User-agent',ua)

3.ip代理

# -*- coding: utf-8 -*-
'''
从本地文件proxy.py中
读取可以用的代理列表
并从中随机选择一个代理
供给spider使用
'''
from xiubai.middlewares.proxy import proxies
import random

class RandomProxy(object):
    def process_request(self,request,spider):
        # 从文件中随机选择一个代理
        proxy = random.choice(proxies)

        request.meta['proxy'] = 'http://{}'.format(proxy)

调用,可以直接从网上爬取免费的代理ip,进行代理点击打开链接

# -*- coding: utf-8 -*-
'''
通过爬取可用的免费代理,
进行测试可用度之后
筛选获得的代理

将静态的资源文件写在功能文件之外
方便及时更新维护。
'''
# 可以自行添加更多代理
proxies = [
    '89.36.215.72:1189',
    '94.177.203.123:1189',
    '110.73.11.227:8123',
    '180.183.176.189:8080',
    '109.62.247.81:8080',
]

4.settings设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值