注:本系列專欄需要有簡單的python3 語言基礎
爬蟲的相關作用在此就不再說明,相信能夠點進該系列文章的讀者都已經瞭解了爬蟲是什麼,並且能夠做什麼。由於是發佈在互聯網的文章,所以系列文章都不以書籍的方式從頭到尾的敘述作用及其一些簡介。文章將快速的進入爬蟲的開發講解。
開始
爬蟲一般的實現流程如下:
首先向一個 Url 地址發送請求,隨後遠端服務器將會返回整個網頁。常規情況下,當我們使用瀏覽器訪問網站也是這麼一個流程;用戶在瀏覽器輸入一個地址,瀏覽器將會發送一個服務器請求,服務器返回請求的內容,隨後瀏覽器解析內容。
其次,發送請求後,將會得到整個網頁的內容。
最後,通過我們的需求去解析整個網頁,通過正則或其它方式獲取需要的數據。
發送請求 獲取網頁
一般情況下發送請求和獲取網頁是相互實現的,通過請求後就會得到網頁數據。
我們使用requests 庫進行web的請求。
代碼編寫如下:
import requests
url="https://www.baidu.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
html=requests.get(url,headers=headers)
print(html.text)
import requests
:引入 requests 模塊url="https://www.baidu.com/"
:設置要請求的url值,這裏爲百度headers
:爲了更好的僞造自己是瀏覽器訪問的,需要加一個頭,讓自己看起來是通過瀏覽器訪問html=requests.get(url,headers=headers)
:requests使用get方法,請求網站爲url設置的值,頭部爲headersprint(html.text)
:顯示返回的值html中的text文本,text文本則爲網頁的源代碼
解析網頁
接下來需要使用一個庫 BeautifulSoup庫,BeautifulSoup 是靈活方便的網頁解析庫,使用bs4(BeautifulSoup )可以快速的使我們獲取網頁中的一般信息。例如我們需要獲取剛剛得到網頁源碼中的title標題,首先引入 bs庫:
from bs4 import BeautifulSoup
隨後使用 beautifulsoup 進行解析,html.parser 代表html的解析器,可以解析html代碼;其中 html.text 爲網頁源碼爲html,如下:
val = BeautifulSoup(html.text, 'html.parser')
解析完成後,如果想獲取標題值,則直接使用 .title 進行獲取:
print(val.title)
運行結果如下:
完整代碼如下:
import requests
from bs4 import BeautifulSoup
url="https://www.baidu.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
html=requests.get(url,headers=headers)
val = BeautifulSoup(html.text, 'html.parser')
print(val.title)
如果想進行抓取文件的保存,可以如下方式編寫代碼:
f = open(r'D:\html.html',mode='w')
f.write(html.text)
f.close()
以上代碼將網頁的源代碼保存至D盤根目錄下,完整代碼如下:
import requests
from bs4 import BeautifulSoup
url="https://www.baidu.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
html=requests.get(url,headers=headers)
val = BeautifulSoup(html.text, 'html.parser')
print(val.title)
f = open(r'D:\html.html',mode='w')
f.write(html.text)
f.close()
以上代碼可能會出現編碼不一致,出現“亂碼”的情況,可以通過以下方式解決:
f = open(r'D:\html.html',mode='w',encoding="utf-8")
在open函數中,添加編碼爲 utf-8 即可。最終打開保存的文件如下:
由於有些資源是動態加載,獲取的鏈接有時效性,所以並沒有顯示。
這樣最簡單的一個爬蟲就解決了,下一篇將繼續深入瞭解爬蟲。