• fake-useragent,python爬虫伪装请求头


    在编写爬虫进行网页数据的时候,大多数情况下,需要在请求是增加请求头,下面介绍一个python下非常好用的伪装请求头的库:fake-useragent,具体使用说明如下:

    1.在scrapy中的使用

    第一步

    pip install fake-useragent

    第二步:在middlewares中配置下载中间件。

    class RandomUserAgentMiddleware(object):
        #随机更换user_agent
        def __init__(self, crawler):
            super(RandomUserAgentMiddleware,self).__init__()
            self.ua = UserAgent()
            self.ua_type = crawler.settings.get("RANDOM_UA_TYPE","random")#为了随机获得浏览器类型
     
        @classmethod
        def from_crawler(cls, crawler):
            return cls(crawler)#导入crawler,从而获取其他的配置文件里的数据
     
        def process_request(self,request,spider):
            def get_ua():
                return getattr(self.ua,self.ua_type)#获取ua的ua_type属性,也就是获得random
     
            request.headers.setdefault('User-Agent',get_ua())

    第三步:在settings中配置

    RANDOM_UA_TYPE = "random"
    USER_AGENT ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    DEFAULT_REQUEST_HEADERS = {
         'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en',
         'User-Agent':USER_AGENT,
    }

    2不是在scrapy中的使用

    pip install fake-useragent

    获取各浏览器的fake-useragent

    from fake_useragent import UserAgent
    ua = UserAgent()
    #ie浏览器的user agent
    print(ua.ie)
    
    #opera浏览器
    print(ua.opera)
    
    #chrome浏览器
    print(ua.chrome)
    
    #firefox浏览器
    print(ua.firefox)
    
    #safri浏览器
    print(ua.safari)
    
    #最常用的方式
    #写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头
    print(ua.random)
    print(ua.random)
    print(ua.random)

    示例代码

    from fake_useragent import UserAgent
    import requests
    ua=UserAgent()
    #请求的网址
    url="https://www.baidu.com"
    #请求头
    headers={"User-Agent":ua.random}
    #请求网址
    response=requests.get(url=url,headers=headers)
    #响应体内容
    print(response.text)
    #响应状态信息
    print(response.status_code)
    #响应头信息
    print(response.headers)

     

  • 相关阅读:
    go开发常用工具
    go 组合取代继承
    go 的struct 跟map赋值不同
    Go进阶35:Go语言自定义自己的SSHServer harder
    Go进阶18:常用加密解密算法总结
    golang处理时区
    Go的定时器cron
    Docker Alpine 容器修改/etc/hosts 不生效的问题
    成为 Go 高手的 8 个 GitHub 开源项目
    C#知识点总结系列:3、C#中Delegate和Event以及它们的区别
  • 原文地址:https://www.cnblogs.com/zlel/p/10112132.html
Copyright © 2020-2023  润新知