1.settings.py中的重点字段和内涵
USER_AGENT 设置ua
ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守
CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
DOWNLOAD_DELAY 下载延迟,默认无延迟
COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
DEFAULT_REQUEST_HEADERS 设置默认请求头
SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
DOWNLOADER_MIDDLEWARES 下载中间件
2.爬虫防止反爬虫的方法:
1)动态更换user-agent,设置代理池,
Step1:fake-useragent,随机获取UA。
github地址:https://github.com/hellysmile/fake-useragent
下载完放到python安装目录内(方便管理)
命令行pip install fake-useragent进行安装
Step2:
class RandomUserAgentMiddlware(object):
def __init__(self, crawler):
super(RandomUserAgentMiddlware, self).__init__()
self.ua = UserAgent()
#可读取在settings文件中的配置,来决定开源库ua执行的方法,默认是random,也可是ie、Firefox等等
self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random")
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
#更换用户代理逻辑在此方法中
def process_request(self, request, spider):
def get_ua():
return getattr(self.ua, self.ua_type)
print(get_ua())
request.headers.setdefault('User-Agent', get_ua())
Step3:在settings.py中开启我们的Middleware,同时还要关闭scrapy自带的代理Middleware:
DOWNLOADER_MIDDLEWARES = {
'web_content.middlewares.RandomUserAgentMiddlware': 543,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}
2)ip地址池:
VPN和代理IP 大部分网站使用IP来ban(质量不高,暂不采取)
免费代理不稳定,质量不高,排除掉。
3)设置下载延迟
DOWNLOAD_DELAY = 0
4)scrapy集成selenium(效率较低,暂不采取)
5)禁用cookie
COOKIES_ENABLED = False
6)违反爬虫规则文件
ROBOTSTXT OBEY = False
7)限制访问频率(导致爬虫速度下降,暂不采取)
#开启访问频率限制
AUTOTHROTTLE ENABLED = True
#设置访问开始的延迟
AUTOTHROTTLE START DELAY = 5
#设置访问之间的最大延迟
AUTOTHROTTLE MAX DELAY = 60
#设置Scrapy 并行发给每台远程服务器的请求数量
AUTOTHROTTLE TARGET CONCURRENCY= 1.0
#设置下裁之后的自动延迟
DOWNLOAD DELAY = 3
8)对于爬虫过程中失败的链接
措施1:
#对失败的HTTP进行重新请求
RETRY_ENABLED = True
RETRY_TIMES = 1
措施2:对应重新请求在此失败,详见下一专题“解决ajax异步渲染页面防止反爬虫”