1. 程式人生 > >一個很簡單很簡單的爬蟲

一個很簡單很簡單的爬蟲

軟體工程大作業需要做一個專案,但是有個同學啥也不會,前幾天跟他說了說爬蟲,結果他也沒研究明白,那我就寫出來唄。

這是一個很簡單很簡單很簡單的小東西,只是為了瞭解爬蟲的原理而已。

爬蟲是啥,其實就是把網上的非結構化資料通過某種方式搞入你的伺服器並結構化儲存唄。

那就開始研究吧,這個小爬蟲主要用兩個庫,requests和bs4。

為啥要用requests庫不用Python內建的urllib模組呢?因為urllib用起來很麻煩,還缺功能,requests就簡單方便唄。

在終端輸入:

pip install requests#安裝requests庫

那bs4呢?bs4是個解析html啊,xml文件的庫,當你用requests庫把網頁拉下來以後,就用需要用bs4解析一下,比如提取特定ID啊標籤啊什麼的。

在終端輸入:

pip install beautifulsoup4#安裝bs4庫

做完上面兩步以後,就可以開始寫個最簡單的爬蟲了。

先試試requests好用不好用:

import requests
url = 'https://news.sina.com.cn/society/'#一會要爬的網頁
r = requests.get(url)#http的get請求
r.encoding = 'utf-8'#用utf-8對文字編碼
print(r.text)#輸出

下面就是程式碼執行結果和實際網頁原始碼對比,是完全一樣的(看網頁原始碼用chrome瀏覽器,快捷鍵F12)。

這是輸出結果

這是網頁原始碼

除了剛剛的get方法,還有post,put等等,具體用法自己研究吧,都在官方文件裡面呢。

我覺得看文件或者看書永遠比看什麼X客學院,X馬教學視訊啥的有用。

上面的requests用完了,我們再試試bs4的功能,程式碼如下:

import requests
import select
from bs4 import BeautifulSoup
newurl = 'https://news.sina.com.cn/society/'
res = requests.get(newurl)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')#使用bs4的HTML解析器
print(soup.select("a"
))#輸出標籤為a的內容

以下是程式碼輸出的內容:

這裡寫圖片描述

這裡寫圖片描述

稍微一看,沒啥問題。

這樣把上面兩端程式碼結合完畢,就可以從網頁中篩出我們想要的標籤了,接下來是研究怎麼把文字提取出來。

其實也很簡單,通過看官方文件,我們很容易篩出文字,程式碼如下:

import requests
import select
from bs4 import BeautifulSoup
newurl = 'https://news.sina.com.cn/society/'
res = requests.get(newurl)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')#使用bs4的HTML解析器
for s in soup.select('a'):
    print(s.string)#官方文件可查

這是執行結果:

這裡寫圖片描述

但是發現有問題啊,這前幾行輸出的是啥啊???我要的是新聞啊???那咋辦呢???

莽一點,直接在結果裡面篩選唄。

那問題就來了,看看上面s.string是啥型別的,用type()這函式就行了。測試完畢發現是s.string是class ‘bs4.element.NavigableString’,翻譯過來就是‘可遍歷字串’,這個名字聽起來可以操作,字串嘛,我沒看定義啊,直接繼續莽幾行程式碼(這個操作很不好2333333333):

for s in soup.select('a'):
    if s.string != None and len(s.string) >= 6:
        print(s.string)

第二行程式碼稍微看一下,因為上文中提取的string有兩種型別我們不想要,第一種是None,第二種是欄目分類,比如社會新聞啊國際新聞這種四個字左右的,這些不是新聞啊,一般來講新聞怎麼也要十來個字吧,所以我使用了第二行的操作來篩選結果,最終執行截圖為:

這裡寫圖片描述

這次看起來就正常很多了。

但是我剛剛這種方法其實很莽的,因為理論上遇見這種沒見過的class ‘bs4.element.NavigableString’,需要去看看定義或者文件的,我單純的偷了個懶,反正這個小東西沒啥太大意義,只是稍微看看爬蟲是啥意思,事實上爬蟲蠻麻煩的,爬的時候要廣度優先啊深度優先啊等等,儲存在本地或者伺服器時候,選擇結構也很麻煩,分析策略也不簡單,但是都是後話,這幾行小東西只是單純的入門而已。拋磚引玉,玩python,或者玩計算機,更多是自己學自己研究。多看官方文件多看這些庫的原始碼就好了。

END