初級爬蟲第四天
一、兩個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
#打印具體錯誤信息
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)
初級爬蟲第四天