• 01_爬虫伪装成浏览器的四种方法


    好多网站对于爬虫中没有进行浏览器伪装的会进行反爬

    糗事百科网站为例

    下面提供了三种方法添加headers,使爬虫能够伪装成浏览器访问

    备注:

    方法二和方法三中省略了

    import urllib.request
    url = 'http://www.qiushibaike.com/'

    方法一:通过opener添加header

     1 # 方法一:通过opener添加headers
     2 import urllib.request
     3 url = 'http://www.qiushibaike.com/'
     4 
     5 # 头文件格式header=('User-Agent',具体用户代理值) 元组形式,元组内包含(key,value)
     6 headers=('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0')
     7 # 创建opener对象
     8 opener = urllib.request.build_opener()
     9 opener.addheaders = [headers]
    10 # (1)直接使用opener进行爬虫
    11 data = opener.open(url).read()
    12 # print(data)
    13 print(len(data))
    14 # (2)将opener安装为全局,全局生效后,再使用urlopen
    15 urllib.request.install_opener(opener) 
    16 data = urllib.request.urlopen(url).read()
    17 print(len(data))

    
    

    方法二:通过opener批量添加header

     1 # 方法二:批量添加headers 有时候只添加user-agent这一个header不行,需要多添加几个header
     2 headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0","Content-Type":"application/javascript",
     3 }
     4 #创建opener对象
     5 opener = urllib.request.build_opener()
     6 opener.addheaders = headers.items()  #header.items() 字典(Dictionary).items() 函数以列表返回可遍历的(键, 值) 元组数组。正好符合addheaders属性要求的值的类型。[(key1,value1),(key2,value2),(key3,value3)]
     7 # (1)直接使用opener进行爬虫
     8 data = opener.open(url).read()
     9 # print(data)
    10 print(len(data))
    11 # (2)将opener安装为全局,全局生效后,再使用urlopen
    12 urllib.request.install_opener(opener) 
    13 data = urllib.request.urlopen(url).read()
    14 print(len(data))

    方法三:通过Request添加header

    1 # 方法三:通过Request添加headers
    2 req = urllib.request.Request(url)
    3 req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')
    4 req_data = urllib.request.urlopen(req).read()
    5 print(len(req_data))

     方法四:通过第三方库requests添加headers

     1 # 方法四:通过requests第三方库,添加headers
     2 import requests
     3 
     4 
     5 hd={'User-Agent':'Mozilla/5.0'}
     6 def get_html_text(url):
     7     try:
     8         r = requests.get(url, timeout=10, headers = hd)
     9         r.raise_for_status()
    10         r.encoding = r.apparent_encoding
    11         html = r.text
    12         return html
    13     except Exception as result:
    14         print('错误类型:', result)
    15 
    16 
    17 html = get_html_text(url)
    18 print(len(html))
  • 相关阅读:
    Json,Gson,FastJson解析笔记
    Java 里把 InputStream 转换成 String 的几种方法
    11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
    HDU 1599 find the mincost route
    如何更改Java括号中的默认对齐
    Android Java 与 C++ 恒调用,路径、文件名、延长的最大长度
    使用android SpannableStringBuilder实现图文混排,看到许多其他
    POJ 2352 Stars 树阵
    cocos2dx环境配置和打包
    DSR on Openstack POC
  • 原文地址:https://www.cnblogs.com/summer1019/p/10386422.html
Copyright © 2020-2023  润新知