实习工作学习记录 scrapy

从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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值