在Scrapy中使用IP池或用户代理(python3)
一、创建Scrapy工程
scrapy startproject 工程名
二、进入工程目录,根据爬虫模板生成爬虫文件
scrapy genspider -l # 查看可用模板
scrapy genspider -t 模板名 爬虫文件名 允许的域名
三、定义爬取关注的数据(items.py文件)
四、编写爬虫文件
五、设置IP池或用户代理
(1)设置IP池
步骤1:在settings.py文件中添加代理服务器的IP信息,如:
# 设置IP池
IPPOOL = [
{"ipaddr": "221.230.72.165:80"},
{"ipaddr": "175.154.50.162:8118"},
{"ipaddr": "111.155.116.212:8123"}
]
步骤2:创建下载中间文件middlewares.py(与settings.py同一个目录),如:
#创建方法,cmd命令行,如项目为modetest,
E:\workspace\PyCharm\codeSpace\modetest\modetest>echo #middlewares.py
# -*- coding: utf- -*-
# 导入随机模块
import random
# 导入settings文件中的IPPOOL
from .settings import IPPOOL
# 导入官方文档对应的HttpProxyMiddleware
from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddleware class IPPOOlS(HttpProxyMiddleware):
# 初始化
def __init__(self, ip=''):
self.ip = ip # 请求处理
def process_request(self, request, spider):
# 先随机选择一个IP
thisip = random.choice(IPPOOL)
print("当前使用IP是:"+ thisip["ipaddr"])
request.meta["proxy"] = "http://"+thisip["ipaddr"]
步骤3:在settings.py中配置下载中间件
# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':,
'modetest.middlewares.IPPOOlS' :
}
(2)设置用户代理
步骤1:在settings.py文件中添加用户代理池的信息(配置几个浏览器'User-Agent'),如:
# 设置用户代理池
UPPOOL = [
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
]
步骤2:创建下载中间文件uamid.py(与settings.py同一个目录),如:
#创建方法,cmd命令行,如项目为modetest,
E:\workspace\PyCharm\codeSpace\modetest\modetest>echo #uamind.py
# -*- coding: utf- -*-#
# 导入随机模块
import random
# 导入settings文件中的UPPOOL
from .settings import UPPOOL
# 导入官方文档对应的HttpProxyMiddleware
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware class Uamid(UserAgentMiddleware):
# 初始化 注意一定要user_agent,不然容易报错
def __init__(self, user_agent=''):
self.user_agent = user_agent # 请求处理
def process_request(self, request, spider):
# 先随机选择一个用户代理
thisua = random.choice(UPPOOL)
print("当前使用User-Agent是:"+thisua)
request.headers.setdefault('User-Agent',thisua)
步骤3:在settings.py中配置下载中间件
# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': ,
4 'modetest.uamid.Uamid':
}
总而言之,有时候避免不了配置这类信息,所以直接在settings中都一起配置了如下,直接粘贴到settings.py文件的最后面
#======================================== # 设置IP池和用户代理 # 禁止本地Cookie
COOKIES_ENABLED = False # 设置IP池
IPPOOL = [
{"ipaddr": "221.230.72.165:80"},
{"ipaddr": "175.154.50.162:8118"},
{"ipaddr": "111.155.116.212:8123"}
] # 设置用户代理池
UPPOOL = [
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
] # 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {
#'scrapy.contrib.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,
#'modetest.middlewares.IPPOOlS' : 125,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 2,
'modetest.uamid.Uamid': 1
} #============================================
在Scrapy中使用IP池或用户代理(python3)的更多相关文章
- 在Scrapy中使用IP池或用户代理更新版(python3)
middlewares.py # -*- coding: utf-8 -*- # 导入随机模块 import random # 导入有关IP池有关的模块 from scrapy.downloaderm ...
- scrapy中使用 IP 代理
在 scrapy 中使用 ip 代理需要借助中间件的功能 首先在settings 中设置好中间件,中间件优先级数字越小越先被执行 , } 然后编写中间件,拦截请求设置代理 class ProxyMid ...
- 封装IP池和用户代理相应的类(python3)
一.middlewares.py源代码: # -*- coding: utf-8 -*- # 导入随机模块 import random # 导入有关IP池有关的模块 from scrapy.contr ...
- Scrapy中的UA池,代理池,以及selenium的应用
UA池 代理池 selenium在Scrapy中的应用 UA池 - 下载中间件: - 下载中间件(Downloader Middlewares) 位于scrapy引擎和下载器之间的一层组件. - 作用 ...
- 如何优雅的在scrapy中使用selenium —— 在scrapy中实现浏览器池
1 使用 scrapy 做采集实在是爽,但是遇到网站反爬措施做的比较好的就让人头大了.除了硬着头皮上以外,还可以使用爬虫利器 selenium,selenium 因其良好的模拟能力成为爬虫爱(cai) ...
- python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL
一.先在MySQL中创建test数据库,和相应的site数据表 二.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo4 三.进入 ...
- scrapy 使用代理ip
1.在settings文件中添加ip池 IPPOOL=['xxx.xx.xx.xx','xxx.xx.xxx.xx'] 2.在middleware文件中添加自己的代理ip类(首先需要导入ipPOOL, ...
- python框架Scrapy中crawlSpider的使用
一.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo3 二.进入工程目录,根据爬虫模板生成爬虫文件 #scrapy genspi ...
- 建立爬虫代理IP池
单线程构建爬虫代理IP池 #!/usr/bin/python3.5 # -*- coding:utf-8 -*- import time import tempfile from lxml impor ...
随机推荐
- Strace--系统调用分析问题集锦
---------------------------------------------------------------------------------------------------- ...
- LNMP架构四
php-fpm的pool(连接池) 我们查看php的进程时,会发现,在最后一个pool的选项,而这个就是我们在php-fpm配置文件里写的一个连接池. [root@bogon linux.com]# ...
- 运行百度语音识别官方iOS demo报错: load offline engine failed: 4001
运行官方BDVRClientSample这个demo(ios版的),demo可以安到手机上,但是点“识别UI”那个按钮后“授权验证失败”.如果点“语音识别”那个按钮,控制台输出:2015-10-23 ...
- Unity3D发布安卓报错permisson denied的解决
没有打开SD卡的写入权限 unity提供了sd卡权限修改的参数:
- Atitit.软件开发的几大规则,法则,与原则。。。attilax总结
Atitit.软件开发的几大规则,法则,与原则... 1. 设计模式六大原则 2 1.1. 设计模式六大原则(1):单一职责原则 2 1.2. 设计模式六大原则(2):里氏替换原则 2 1.3. 设计 ...
- Vivado 自带IP仿真问题
可以新建一个测试工程,通过IP catalog直接生产IP核,在IP核上右键选择 Open IP Example Design 之后选择生成路径. 启动Run Simulation.
- 1.文件I/O
一. open()&close() #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h& ...
- Unity中使用ulua的个人经验总结
热度 286052 2015-3-15 14:32 |个人分类:技术类| Lua Lua代码都是运行时才编译的,不运行的时候就如同一张图片.一段音频一样,都是文件:所以更新逻辑只需要更新脚本,不需要再 ...
- QT界面 使用QStyledItemDelegate QPainter QStyleOptionViewItem QModelIndex组合实现项的绘制
QStyledItemDelegate类为来自模型的数据项提供了显示和编辑工具. 当在Qt项视图(例如QTableView)中显示来自模型的数据时,各个项由委托(delegate)绘制.此外,当编辑一 ...
- c++的set_unexpected不起作用
代码是从:http://www.cplusplus.com/referen ... /?kw=set_unexpected找的 // set_unexpected example #include & ...