zoukankan      html  css  js  c++  java
  • urllib基础-构造请求对象,设置用户代理User-Agent

      有的网页具有一些反爬机制,如:需要浏览器请求头中的User-Agent。User-Agent类似浏览器的身份证。

      程序中不设置User-Agent。默认是Python-urllib/3.5。这样网站就知道是程序(而不是人)在访问,有的网站(如:西刺代理)就不会响应这样的请求。

      程序中要设置浏览器请求头,通过将request.urlopen()中传入请求对象。请求对象中包含爬取的目标网页url,和浏览器的请求头内容,为了防止反爬机制,因为程序的请求速度很快,我们不是一直使用同一个请求头,我们在一个列表中存放很多请求头,每次请求时,随机在数组中获取一个请求头。

     1 from urllib import request
     2 import random
     3 
     4 # 确定爬去目标
     5 base_url = 'http://www.xicidaili.com'
     6 
     7 url_agents = [
     8     'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
     9     'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
    10     'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
    11     'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
    12 ]
    13 # 构建请求头
    14 headers = {
    15     #随机获取浏览器身份请求头
    16     'User-Agent':random.choice(url_agents)
    17 }
    18 
    19 # 构建请求对象
    20 req = request.Request(url=base_url,headers=headers)
    21 
    22 # 发起请求
    23 response = request.urlopen(req)
    24 
    25 #获取请求内容
    26 html = response.read().decode('utf-8')
    27 
    28 # 打印爬取的网页内容
    29 print(html)
    • request.urliopen()的参数可以是一个请求地址,也可以是一个请求对象。
    • resquest.Reaquest(url=base_url,headers=headers)

        url是请求的地址,headers是请求头内容。

        headers请求头是一个字典。请求头包含的内容可以通过浏览器查看。

    • random.choice(url_agent)

        随机从url_agent列表中获取一个元素

        本例中构建了一个用户代理池,每次亲故随机获取User-Agent的信息。

  • 相关阅读:
    unity工厂模式
    unity对象池
    unity进阶项目------保卫萝卜(2)
    C#状态机
    unity进阶项目------保卫萝卜(1)
    OpenGL——外部读档+异常报错
    OpenGL入门之入门
    xlua build时 报错处理
    捕鱼达人Demo版下载
    UGUI-Text——自适应
  • 原文地址:https://www.cnblogs.com/doitjust/p/9220689.html
Copyright © 2011-2022 走看看