Python中Scrapy框架的代理使用

技巧库 · ipidea · 于 5个月前 发布 · 434 次阅读

本文中所涉及的网站皆以GG代替。 scrapy框架,熟悉python爬虫的朋友们应该知道甚至有所了解,scrapy是一个爬虫框架,模块化程度高,可拓展性强,对相应的模块进行开发和拓展就能满足使用者想要得到的效果。 所以本次我就简单介绍下scrapy的使用和代理的配置。 一、scrapy的配置 说是配置,其实scrapy也没啥可配置的,因为他新建项目真的很简单,再你想要创建项目的目录下输入或者打开cmd输入: scrapy startproject mySpider(你想要的项目名) 但是前提是,你得需要pip安装scrapy: pip install scrapy 当你pip安装好scrapy并且部署好scrapy项目之后,最基础的东西就搭建好了。 二、scrapy的使用 还是先看一下scrapy的目录结构吧家人们。 首先我先创建了一个叫做 scrapytest 的项目,目录结构如下: 从外到内,scrapy.cfg 是scrapy项目的配置文件。items.py定义数据结构,规定了你想存什么样的数据和数据类型。pipelines.py 正如其名管道文件,产生的数据类型再次做数据处理。setting.py 全局设置。 middlewares.py 中间件。spiders 自定爬虫规则。 首先创建一个spider: scrapy genspider GGSpider GG.com 输入指令后会自动帮你创建一个spider文件: 查看里面的元素,name代表此项目的名字,allowed_domains 标识允许爬取的域名并过滤非此域名的链接,start_urls 待爬取url。 修改一下start_urls里面的链接,把http改成https后,新建一个方法,开始进行爬取:

1.def start_requests(self):  
2.    for url in self.starturl:  
3.        GGHeaders = {  
4.            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",  
5.            "authority": "www.GG.com",  
6.            "user-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36",  
7.        }  
8.        yield scrapy.Request(url,headers=googleHeaders) 

加入不加这个方法的话,scrapy就会根据默认的流程,对start_urls的链接进行请求下载执行,将返回值传给parse函数,parse负责解析处理请求内容。 但是加入了新的方法之后,可以添加请求头,也可以不在中间件设置代理,然后执行请求将请求结果迭代给parse函数。

1.import scrapy  
2.   
3.class TestSpider(scrapy.Spider):  
4.    name = 'GGSpider'  
5.    allowed_domains = ['GG.com']  
6.    start_urls = ['https://GG.com/']  
7.   
8.    def start_requests(self):  
9.        for url in self.starturl:  
10.            googleHeaders = {  
11.                "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",  
12.                "authority": "www.GG.com",  
13.                "user-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36",  
14.            }  
15.            yield scrapy.Request(url,headers=googleHeaders)  
16.   
17.    def parse(self, response):  
18.        print(response.text)  

执行刚才编写好的spider: scrapy crawl googleSpider 这个googleSpider就是刚才项目中的name,结果如下: 很显然,谷歌当然没法正常访问的,之后就引出下一个部分,scrapy使用代理。 三、Scrapy代理设置 scrapy添加代理访问有两种方式,一个是在中间件设置代理,第二个就是在spider中请求前添加代理。比较适合账户认证的代理方式。 3.1 中间件添加代理 首先在中间件middlewares.py中,在最后加入如下代码:

1.class ProxyMiddleware(object):  
2.    def process_request(self,request,spider):  
3.        entry = 'http://{}:{}@{}:{}'.format("账户", "密码","host","port")  
4.        request.meta["proxy"] = entry  

然后在setting.py中设置优先级:

1.DOWNLOADER_MIDDLEWARES = {  
2.   '你的项目名.middlewares.ProxyMiddleware': 100,  
3.}  
3.2 spider中设置代理
1.import scrapy  
2.   
3.class TestSpider(scrapy.Spider):  
4.    name = 'GGSpider'  
5.    allowed_domains = ['GG.com']  
6.    start_urls = ['https://GG.com/']      
7.   
8.    def start_requests(self):  
9.        # 账密:  
10.        # 账密链接赋值给变量  
11.        entry = 'http://{}-zone-custom:{}@proxy.ipidea.io:2334'.format("帐号", "密码")  
12.        # api  
13.        # entry = 'http://{}'.format("api获取的ip代理")  
14.        # 传参meta迭代下一个方法  
15.        for url in self.starturl:  
16.            googleHeaders = {  
17.                "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",  
18.                "authority": "www.GG.com",  
19.                "user-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36",  
20.            }  
21.            yield scrapy.Request(url,headers=GGHeaders,meta={"proxy":entry})  
22.   
23.    def parse(self, response):  
24.        print(response.text) 

我这里使用的是ipidea的代理,好的代理能帮助你更好的获取数据,高质量低延迟,而且新用户可以白嫖哦! 地址:http://www.ipidea.net 如果你要是访问GG的话,访问的过于频繁会出现429警告,建议不要高频访问,适当慢一点。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册