• 初级爬虫第四天


    一、两个Error:HTTPError、URLError

    (1)HTTPError包含URLError

    (2)HTTPError:

    当URL地址为:网站存在,但是具体的网页不存在时,返回404,报错HTTPError

    (3)URLError:

    当URL地址为:完全没有这个网站时,就会报URLError

    如:www.fsdfdsfdsfsd.com

    (4)解决方法:使用异常处理

    4.1 HTTPError:

    try:

      request = urllib.request.ulropen(url)

    except urllib.error.HTTPError as error:

      #打印具体错误信息

      print(error)

      #打印具体错误代码

      print(error.code)

    4.2 URLError:

    try:

      request = urllib.request.ulropen(url)

    except urllib.request.URLError as error:

      print(error)

    二、requests模块:

    (1)请求头、响应头:

     1 import requests
     2 
     3 
     4 class RequestSpider(Object):
     5     def __init__(self):
     6         url = "http://www.baidu.com/"
     7         
     8         #请求头
     9         headers = {"User-Agent": "xxx"}
    10         
    11         #发送网络请求
    12         self.response = requests.get(url, headers=headers)
    13     
    14     def run(self):
    15         #1. 获取请求头
    16         #该方法获取的是,之前添加的请求头的信息
    17         #如果之前没有添加请求头,则requests模块会自动给加上一个请求头,如:python-requests/2.20.0
    18         request_header = self.response.request.headers
    19         
    20         #2. 获取响应头
    21         response_header = self.response.headers
    22         
    23         #3. 获取响应头的状态码
    24         response_code = self.response.status_code
    25         
    26         #4. 获取请求头的cookie(有些请求头不需要cookie)
    27         #注意_cookie之前多了一个下划线
    28         request_cookie = self.response.request._cookie
    29         
    30         #5. 获取响应头的cookie
    31         response_cookie = self.response.cookies
    32         

    (2)会自动将中文转译为ASCII码格式:

    爬取百度首页搜索“美女”关键词结果

    https://www.baidu.com/s?wd=美女

    2.1 使用原生urllib:

     1 import urllib.request
     2 import urllib.parse
     3 
     4 fixed_url = "www.baidu.com/s?wd="
     5 
     6 params = {"wd": "美女"}
     7 
     8 complete_url = fixed_url + params["wd"]
     9 
    10 #由于url,"www.baidu.com/s?wd=美女"中含有中文,所以需要转译为ASCII码
    11 final_url = urllib.parse.quote(complete_url)
    12 
    13 #发送网络请求
    14 response = urllib.request.urlopen(url)

    2.2 使用requests模块:

     1 import requests
     2 
     3 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"}
     4 
     5 fixed_url = "www.baidu.com/s?wd="
     6 
     7 params = {"wd": "美女"}
     8 
     9 #requests模块,会自动将URL中的中文转译
    10 #发送get网络请求
    11 response = requests.get(url, params=params, headers=headers)

    三、json数据:

    理论:

    HTML:用于写网页,显示数据

    json:数据格式,数据量最小的格式(对比XML格式,数据量小)

    XML:数据格式,数据量大,xml是json的前身

    有时访问一个URL地址,服务器有可能会直接返回一个json格式数据

    四、发送post请求:

    requests.post(url, data=None, json=None)

    ——如何验证网页请求成功?

    ——请求状态码:response.status_code()

    ——除了200之外,都有问题

    五、证书问题:

    Q:如何忽略证书?

    A:将get()方法中的参数verify=False

    eg:

    requests.get(url, headers=headers, verify=False)

    六、使用免费代理IP

    1 free_proxy = {"协议": "IP地址: 端口号"}
    2 
    3 requests.get(url=url, headers=headers, proxies=free_proxy)

     

     

  • 相关阅读:
    html 时间区间选择功能
    Django 【settings】数据库设置
    Django forms 定制form字段
    避免js全局变量污染的方法
    js获取路由
    采用遍历的方法获取字符串a在字符串b中的位置
    vue 学习笔记
    Promise
    js常用JSON数据操作
    js 数组遍历方式
  • 原文地址:https://www.cnblogs.com/tommyngx/p/10849006.html
Copyright © 2020-2023  润新知