今天是Andy學Python的第54 天哦!
大家好,我是Andy。
今天學習了抓取網頁內容。
準備利用Python在鳳凰網抓取2021年政府工作報告,並下載到磁盤。
鳳凰網2021年政府工作報告原文地址如下:
https://ishare.ifeng.com/c/s/v002idcmztrcYAv9WEf70--BNGVApMI68TcJe9KBvCEaIqsU__.html
01.
網址解析
Python的urllib組件中的urlparse函數,可輕鬆解析指定網址的內容,在接收返回的ParseResult對象後,即可通過其屬性取出網址中各項有用信息。
ParseResult 對象返回屬性
scheme:返回scheme通訊協議。
netloc:返回網站名稱。
path:返回path路徑。
params:返回url查詢參數(params)字符串。
query:返回query查詢字符串,即GET的參數。
fragment:返回框架名稱。
以上5個屬性如不存在則返回空字符串。
port:返回通信端口。不存在時返回None
# 解析鳳凰網報告網址
from urllib.parse import urlparse
url = 'https://ishare.ifeng.com/c/s/v002idcmztrcYAv9WEf70--BNGVApMI68TcJe9KBvCEaIqsU__.html'
u = urlparse(url)
print(o)
print("scheme = {}".format(u.scheme))
print("netloc = {}".format(u.netloc))
print("path = {}".format(u.path))
print("params = {}".format(u.params))
print("query = {}".format(u.query))
print("fragment = {}".format(u.fragment))
print("port = {}".format(u.port))
02.
用requests 抓取網頁源代碼
requests 用於抓取網頁源代碼。
安裝 Anaconda 集成開發環境時己安裝了 requests 組件,可以直接導入使用。
requests.get()函數接受一個要下載的 URL 字符串,返回一個Response對象(這個名字沒搞懂)。
import requests
url = 'https://ishare.ifeng.com/c/s/v002idcmztrcYAv9WEf70--BNGVApMI68TcJe9KBvCEaIqsU__.html'
html= requests.get(url)
print(html.text)
03.
將下載的文件保存到磁盤
使用標準的 open()函數和 write()方法,將 Web 頁面保存到硬盤中的一個文件。
注意:必須用“寫二進制”模式打開該文件,即向函數傳入字符串'wb',作爲 open()的第二參數。即使該頁面是純文本的,你也需要寫入二進制數據,而不是文本數據,目的是爲了保存該文本中的“Unicode” 編碼。
下載並保存到文件的完整過程如下:
第1步,調用requests.get()下載該文件。
第2步,用'wb'調用open(),以寫二進制的方式打開一個新文件。
第3步,利用Respose對象的iter_content()方法做循環。
第4步,在每次迭代中調用write(),將內容寫入該文件。
第5步,調用close()關閉該文件。
# 從鳳凰網下載政府工作報告並保存
import requests
res = requests.get('https://ishare.ifeng.com/c/s/v002idcmztrcYAv9WEf70--BNGVApMI68TcJe9KBvCEaIqsU__.html')
report = open('report_2021.txt', 'wb')
for chunk in res.iter_content(100000):
report.write(chunk)
report.close()
51Day Day up!
向上向善,日進一步!
每天學習,努力成長!
定個小目標,開啓成長的旅程,遇見更好的自己。
這是我們和自己的約定,許諾自己不負韶華。
路雖遠,行則將至;事雖難,做則必成。
成長的最好時機,就是當下。