1. 程式人生 > >Python爬蟲練習

Python爬蟲練習

小P同學學習Python已經有一段時間了,這不,今天開始準備接觸Python爬蟲方面的知識。 今天要爬的比較簡單,度娘首頁和搜尋頁 ?

爬蟲之前的準備工作

工欲善其事,必先利其器。小P開始對Python的爬蟲工具進行準備。

  1. 作業系統:Win10
  2. Python 3.x
  3. urllib:這是Python內嵌的網頁處理工具,不用單獨下載
  4. BeautifulSoup:支援標準的html的解析,下載網頁後的分析就靠它了,這個標準Python庫沒有,需要單獨下載。

爬蟲工具檢查與安裝

首先利用pip list檢查一下工具包的安裝情況: 在這裡插入圖片描述 很明顯beautifulsoup沒有裝,這裡小P準備使用最新版本的beautifulsoup - beautifulsoup4,簡稱bs4. 安裝使用命令: pip install beautifulsoup4 BeautifulSoup4

安裝完成後重新檢查:pip list, bs4已經在本地了: 在這裡插入圖片描述

爬蟲程式 (一)

小P覺得幹啥事不能好高騖遠,今天第一步先把百度首頁扒一扒。 程式第一版

from urllib import request

url = "http://www.baidu.com"
response = request.urlopen(url)
print(response)

小P很得意,看看看,第一版的小爬蟲出來了。執行一下: 百度網頁返回結果1 “咦,好像列印的結果是一個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 百度搜索Python3

分析了下上面查詢的頁面:

  1. 小P想返回結果的標題 如果要返回頁面的標題,小P使用了Firefox瀏覽器的F12開發者模式: 百度搜索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和儲存到本地檔案的功能,順便看看能不能下載圖片 ?