python中scrapy的使用之设置消息头和更改ip

爬取一些网页时往往会出现不能爬取的现象,这就需要我们自己设置消息头,将其伪装成浏览器。过多的爬取一个网站,该网站的反爬虫技术会将我们block,z这是需要更换ip.

修改middleswares文件:

from scrapy import signals
import random
# 第三方框架,可以产生各种headers
from fake_useragent import UserAgent

# 添加消息头
class RandomUserAgent(object):
    def __init__(self):
        super(RandomUserAgent,self).__init__()
        #实例化方法
        self.ua=UserAgent()
    def process_request(self,request, spider):
        #这里的header是由框架产生的,也可以自己写
        random_type=self.ua.chrome
        request.headers.setdefault("User-Agent",random_type)
class ProxyMiddlleWare(object):
    def __init__(self):
        super(ProxyMiddlleWare,self).__init__()
    def process_request(self,request,spider):
        # 得到地址
        proxy=self.get_Random_Proxy()
        print(proxy+"**********")
        # 设置代理
        request.meta['proxy']="http://"+proxy
    #这个方法是从文档中读取id地址
    def get_Random_Proxy(self):
        with open(r"C:\Users\python\ok_ip.txt",'r') as file:
            text=file.readlines()
        proxy = random.choice(text).strip()
        return proxy
    def process_response(self,request,response,spider):
        #如果该ip不能使用,更换下一个ip
        if response.status!=200:
            proxy = self.get_Random_Proxy()
            print('更换ip'+proxy)
            request.meta['proxy'] = "http://" + proxy
            return request
        return response

关于fake-useragent的使用可以查看:https://github.com/hellysmile/fake-useragent

你可能感兴趣的:(python)