Python爬蟲練習
阿新 • • 發佈:2018-12-16
小P同學學習Python已經有一段時間了,這不,今天開始準備接觸Python爬蟲方面的知識。 今天要爬的比較簡單,度娘首頁和搜尋頁 ?
爬蟲之前的準備工作
工欲善其事,必先利其器。小P開始對Python的爬蟲工具進行準備。
- 作業系統:Win10
- Python 3.x
- urllib:這是Python內嵌的網頁處理工具,不用單獨下載
- BeautifulSoup:支援標準的html的解析,下載網頁後的分析就靠它了,這個標準Python庫沒有,需要單獨下載。
爬蟲工具檢查與安裝
首先利用pip list檢查一下工具包的安裝情況: 很明顯beautifulsoup沒有裝,這裡小P準備使用最新版本的beautifulsoup - beautifulsoup4,簡稱bs4. 安裝使用命令: pip install beautifulsoup4
爬蟲程式 (一)
小P覺得幹啥事不能好高騖遠,今天第一步先把百度首頁扒一扒。 程式第一版:
from urllib import request
url = "http://www.baidu.com"
response = request.urlopen(url)
print(response)
小P很得意,看看看,第一版的小爬蟲出來了。執行一下: “咦,好像列印的結果是一個HttpResponse的物件,不是網頁原始碼?” 那就修改下程式碼,查下度娘,要讀取HttpResponse裡面的內容需要使用response.read().decode('UTF-8‘)的方法
from urllib import request
url = "http://www.baidu.com"
response = request.urlopen(url)
# 讀取httpResponse返回的原始碼
pageInfo = response.read().decode('UTF-8')
print(pageInfo)
歐耶! 第一個小爬蟲實驗成功了!!!
那能不能更進一步把爬蟲程式碼優化一下,接下來就要用到BeautifulSoup了,小P同志開始信心百倍衝擊下面一個難題。 程式第二版 既然已經返回了首頁的原始碼,那接下來小P開始要開始對原始碼進行html解析,使用BeatifulSoup可以解析html和xml。 這裡小P同學開始要對搜尋結果進行爬取了。 首頁小P在百度首頁搜尋一下python3
- 小P想返回結果的標題 如果要返回頁面的標題,小P使用了Firefox瀏覽器的F12開發者模式: 在原始碼中小P發現了一些標題的規律:
為了對返回的程式碼內容進行縮減,需要匯入re正則表示式模組,修改了下程式碼如下:
from urllib import request
from bs4 import BeautifulSoup
import re
url = "http://www.baidu.com/s?wd=Python3"
response = request.urlopen(url)
soup = BeautifulSoup(response,'html.parser')
#返回html中符合以下內容的所有節點
#1. 包含<a></a>
#2. 具有data-click方法,並且以'{'開頭
#3. href中以http://www.baidu.com/link開頭
links = soup.find_all('a', {'data-click':re.compile(r'^{'),'href':re.compile(r'^http://www.baidu.com/link')})
for each_link in links:
print(each_link.text)
執行結果如下: 哈哈哈…小P得意的笑了,小爬蟲第一彈正式完成。
接下來下一站要加入header和儲存到本地檔案的功能,順便看看能不能下載圖片 ?