当前位置: 首页 > 后端技术 > Python

Scrapy入门及配置爬虫代理

时间:2023-03-26 00:13:28 Python

本文通过一个简单的项目实现了Scrapy采集过程。希望这个项目能对Scrapy的使用和框架有所帮助。1、工作流程的关键过程如下:创建一个Scrapy项目。创建一个爬虫来爬取网站和处理数据。通过命令行分析采集到的内容。将分析后的数据保存到MongoDB数据库中。2、准备环境,安装Scrapy框架、MongoDB和PyMongo库。3、爬虫项目的实现(1)创建一个Scrapy项目,文件项目可以直接用scrapy命令生成。命令如下:scrapystartproject教程复制代码(2)爬虫是自己定义的一个类,Scrapy通过这个类从网页中收集内容分析数据的结果。但是这个类必须继承Scrapy提供的爬虫类scrapy.Spider,还要定义爬虫的名称和初始请求,以及如何处理爬取的数据。您还可以使用命令行来创建蜘蛛。例如生成市场蜘蛛,可以执行如下命令:scrapygenspider将代码复制到刚刚创建的tutorial文件夹中,然后执行genspider命令。第一个参数是爬虫的名称,第二个参数是网站的域名。执行完成后在spider文件夹下多了一个quotes.py,就是新建的spider,内容如下:importscrapyclassQuotesSpider(scrapy.Spider):name="quotes"allowed_domains=["quotes.toscrape。com”]start_urls=['http://quotes.toscrape.com/']defparse(self,response):通过复制代码(3)在获取过程中,目标网站会限制爬虫的请求访问频率,并且爬虫必须使用代理在项目中新建middlewares.py文件(./项目名/middlewares.py)#!-*-encoding:utf-8-*-importbase64importsysimportrandomPY3=sys.version_info[0]>=3defbase64ify(bytes_or_str):如果PY3和isinstance(bytes_or_str,str):input_bytes=bytes_or_str.encode('utf8')else:input_bytes=bytes_or_stroutput_bytes=base64.urlsafe_b64encode(input_bytes)ifPY3:return_ciput'else:returnoutput_bytesclassProxyMiddleware(object):defprocess_request(self,request,spider):#代理服务器(产品官网www.16yun.cn)proxyHost="t.16yun.cn"proxyPort="31111"#代理认证信息proxyUser="用户名"proxyPass="密码"request.meta['proxy']="http://{0}:{1}".format(proxyHost,proxyPort)#添加验证头encoded_user_pass=base64ify(proxyUser+":"+proxyPass)request.headers['Proxy-Authorization']='Basic'+encoded_user_pass#设置IP切换头(根据需要)tunnel=random.randint(1,10000)request.headers['Proxy-Tunnel']=str(tunnel)修改项目配置文件(./projectname/settings.py)DOWNLOADER_MIDDLEWARES={'项目名称.middlewares.ProxyMiddleware':100,}