scrapy框架中使用代理 小白亲测有效

本文介绍了如何在Scrapy爬虫项目中使用代理IP,包括设置PROXIES_LIST、在middlewares.py中应用代理选择机制,以及在settings.py中启用或关闭代理功能。作者还分享了验证代理IP有效性的简易方法。

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

在学习爬虫的过程中遇到了这个问题:使用scrapy在爬取数据时怎么使用代理IP?于是去搜索相关资料,最后用这位大神的方法解决了问题:Python scrapy设置代理ip_python的scrapy框架测试用api链接取的ip-优快云博客

不过最后也是总结以下大佬的方法,发现了更简便的方法

一.设置代理池

我们找到settings.py文件,并在其中创建数组类型的变量PROXIES_LIST,其内容就是候选的代理(建议变量名就用PROXIES_LIST)

PROXIES_LIST = [
    'http://120.83.106.228:9999',
    'https://223.241.78.23:808'
]# 当你看到文章时这些代理可能已经失效

二.在中间件middlewares.py中使用代理

什么是中间件可以去看参考链接,他介绍的比较简明,这里我就不赘述了

首先先导入settings中我们定义的代理池(导入后编译器可能会报错,是因为导入的是本地文件,并非官方库,但不影响运行)

from scrapy_37_proxy.settings import PROXIES_LIST
# scrapy_37_proxy是我的项目名,你需要换成你的项目名

注意:就是这里与参考链接不同,他是自己写了一个类,类中定义了一个方法选择代理IP,然后再settings文件中写一个开关加载这个类;而我发现在中间件中本身就有这个方法,我们不用重写这个方法了,直接改就行

此方法在middlewares中第二个类中,方法中自带的return None我们删掉,然后写自己的代码,即从代理池中随机挑选一个代理(需要导入random)

import random
    
def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called
        # return None
        request.meta['proxy'] = random.choice(PROXIES_LIST)

三.在settings.py中打开开关

所谓开关起始就是控制我们刚写的代码是否执行的代码,注释掉就是关,不注释就是开

开关就是这行代码

DOWNLOADER_MIDDLEWARES = {
   "scrapy_37_proxy.middlewares.Scrapy37ProxyDownloaderMiddleware": 543,
}# 默认是关闭状态,即此代码默认是被注释掉的,我们给他打开

运行即可,这样的话我们也不用再自己写一个开关了

我测试IP是否发生改变用的网址是这个,非常简洁且有效互连协议查询 - IP查询 - 查IP(www.cip.cc)

Python Scrapy是一个强大的网络爬虫框架,可以用于抓取网页数据,包括豆瓣电影等网站的信息。爬取豆瓣电影信息通常需要以下几个步骤: 1. **安装Scrapy**:首先确保你已经安装了Python和pip,然后通过命令行安装Scrapy: ``` pip install scrapy ``` 2. **创建项目**:使用`scrapy startproject movie_spider` 创建一个新的Scrapy项目。 3. **配置settings.py**:在settings.py文件中设置下载中间件、允许的URL域名等,并添加对Excel的支持,例如使用pandas库处理数据: ```python ITEM_PIPELINES = { 'movie_spider.pipelines.DfWriterPipeline': 300, } SPIDER_MIDDLEWARES = { # 添加 Excel 写入中间件的位置 } DOWNLOADER_MIDDLEWARES = { # 如果有其他请求头或代理设置,也可以在这里配置 } EXCEL_Writer_PIPELINE = { 'module': 'movie_spider.pipelines.ExcelWriterPipeline', 'excel_file': 'douban_movies.xlsx', # 输出文件名 } ``` 4. **编写spiders**:创建一个Spider(如DoubanMovieSpider),负责解析豆瓣电影页面的数据。通常会使用BeautifulSoup或Scrapy的Selector API来提取所需信息,如电影标题、评分、链接等。 5. **提取数据**:在Spider的解析函数里,获取并存储需要的数据到Item对象,这是Scrapy的基本数据单元。 6. **保存到Excel**:在Pipeline(如上面提到的DfWriterPipeline)中,将Item对象转换成DataFrame并写入Excel文件。 ```python class DfWriterPipeline(object): def __init__(self): self.file = open('douban_movies.xlsx', 'w', encoding='utf-8') self.writer = pd.DataFrame() def process_item(self, item, spider): df_item = pd.Series(item) self.writer = self.writer.append(df_item, ignore_index=True) return item def close_spider(self, spider): self.writer.to_excel(self.file, index=False) self.file.close() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值