初级爬虫第四天

一、两个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)

 

 

原文地址:https://www.cnblogs.com/tommyngx/p/10849006.html