1. 程式人生 > >初級爬蟲第四天

初級爬蟲第四天

fin __init__ 錯誤信息 ike 報錯 ascii ide sel ade

一、兩個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)

初級爬蟲第四天