从8月27日起到现在,已经实习工作一个月了,这个月学到了很多技术知识,特此记录。
-----------------------------------------------------------------------------------
1、添加日志监控程序
在setting.py中添加如下代码段,意思是打开日志记录,文件命名以当前日期(如20180930.log)为格式,日志级别为“INFO”(最低级别,输出全部信息)
LOG_ENABLED = True
LOG_FILE = time.strftime('%Y%m%d', time.localtime(time.time())) + '.log'
LOG_LEVEL = 'INFO'
2、启动程序(一直想默写但是没背下来)
添加文件begin.py,输入以下代码段:
# -*- coding: utf-8 -*-
from scrapy import cmdline
cmdline.execute('scrapy crawl spidername'.split())
其中spidername是你命名的爬虫名称
3、处理Timeout
在setting.py中添加以下程序,其中DOWNLOAD_TIMEOUT的值可以根据情况修改(如果测试时请求超时则改大)
DOWNLOAD_TIMEOUT = 100
RETRY_ENABLED = True
RETRY_TIMES = 3
4、使用API获取IP代理
在setting.py中启动DOWNLOADER_MIDDLEWARES,在middlewares.py文件,类MyproxiesSpiderMiddleware中添加代码如下:
def __init__(self, ip=''):
self.ip = ip
self.start_time = int(time.time())
# IP获取调度,5秒获取一次
def process_request(self, request, spider):
wait_time = time.time()-self.start_time
if wait_time > 5:
self.start_time = int(time.time())
self.ip = self.get_ip()
if self.ip != '':
# print("获取到 ip:" + self.ip)
request.meta["proxy"] = "http://" + self.ip
else:
print("未获取到ip,休眠5秒")
time.sleep(5)
# API代理IP
def get_ip(self):
text = requests.get('代理IP网页接口').text
try:
# 匹配IP
ip = re.findall('\d{2,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{4,5}', text)[0]
return ip
except:
return ''
5、连接redis添加IP代理(同4文件类)
def process_request(self,request, spider):
'''对request对象加上proxy'''
myredis = redis.Redis(host = '?', port = ?,db = ?, password = '?')
proxy = myredis.get("proxies_ip")
proxy = proxy.decode()
print("this is request ip:"+str(proxy))
request.meta['proxy'] = proxy
6、处理异常response状态码(同4文件类)
def process_response(self, request, response, spider):
'''对返回的response处理'''
# 如果返回的response状态不是200,重新生成当前request对象
if response.status != 200:
...("处理机制")...
return response
7、添加随机user-agent
在setting.py中启动DOWNLOADER_MIDDLEWARES,在middlewares.py文件,类MyUserAgentMiddleware中添加代码如下:
def __init__(self, user_agent=''):
self.user_agent = user_agent
def process_request(self, request, spider):
ua = random.choice(self.user_agent_list)
if ua:
'''添加用户代理'''
request.headers.setdefault('User-Agent', ua)
# 用户代理列表
'''添加你的user-agent到列表中'''
user_agent_list = []
8、禁用COOKIES
在setting.py中找到# Disable cookies项,将COOKIES_ENABLED设置为False
# Disable cookies (enabled by default)
COOKIES_ENABLED = False