最簡單的python爬蟲案例,適合入門學習

用python從網頁爬取數據,網上相關文章很多,但能讓零基礎初學者輕鬆上手的卻很少。可能是有的作者覺得有些知識點太簡單不值得花費精力講,結果是難者不會會者不難,初學者常常因此而蒙圈。本人也是小白,剛摸索著爬了兩個簡單的網頁數據,經歷了初學者易犯的各種糊塗,特總結分享一下,希望能對小白們有用。

最簡單的python爬蟲案例,適合入門學習

1、本文代碼環境:python3.7,requests模塊、BeautifulSoup解析庫

python爬網絡數據,方法很多。不同的python版本、不同的模塊、庫,對應代碼都不同。所以,在看他人代碼時,需要搞清代碼環境所用的版本和使用的模塊庫等信息。因為如果環境不同,相同的代碼也可能沒用。初學者往往看到一篇文章講的代碼,複製過來就用,結果就是各種錯誤,這就是因為環境不同造成的。

沒有模塊的,pip安裝一下就好。安裝方法:點擊電腦左下角開始——輸入cmd回車,彈出cmd.exe界面——在界面上輸入pip install requests回車,稍後,提示安裝成功即完成了requests模塊的安裝。BeautifulSoup解析庫是屬於bs4模塊的一個功能塊,所以,用pip安裝時,要安裝pip install bs4。

2、爬蟲4部曲:發出請求——獲得網頁——解析內容——保存內容

建好了代碼環境,就可以開始爬數據了,無論什麼代碼環境,爬蟲核心都是這4步。對新手來說,每一步都不簡單,我們通過一個簡單的爬取一篇小說代碼,來看看到底是怎麼爬數據的。

3、爬取網絡小說


最簡單的python爬蟲案例,適合入門學習

3-1 擬爬取的網絡小說截圖

如圖3-1,我們試著把這篇小說爬下來保存為txt文件,按照爬蟲4部曲,我們逐步來看:

1)、發出請求

用代碼向網絡發出請求,請求訪問某個網址,首先我們得在代碼中給出具體的網址信息,比如上面截圖的網址是:https://www.biqiuge.com/book/4772/2940354.html

那這個網址是怎麼得到的呢,常規方法是通過瀏覽器的開發者工具,我是用的360瀏覽器,點擊右上角的工具菜單,點擊開發者工具即可,打開後的界面如下圖3-2:

最簡單的python爬蟲案例,適合入門學習

圖3-2 開發者工具窗口

頂部菜單選擇Network,中間圓圈選擇Preview,通過選擇左側紅色方框內的不同選項,觀察Preview下部的內容,當能看到我們想要的文字時人(如圖3-3),就說明找到了。

最簡單的python爬蟲案例,適合入門學習

圖3-3 箭頭指示的就是準備爬取的數據

這時點擊Preview左側的Header面板,得到下圖3-4中的url就是我們要找的網址。複製後,粘貼到代碼裡就能發出請求了。

最簡單的python爬蟲案例,適合入門學習

圖3-4 找到請求的網址

有細心的會看到,這個網址和我們平常瀏覽網頁時地址欄裡的網址一樣啊,還用這麼麻煩?

最簡單的python爬蟲案例,適合入門學習

3-5 瀏覽器地址欄網址

這兩個網址確實是一樣的,是不用這麼麻煩,直接從地址欄複製就可以。但很多時候,我們要爬取的網頁數據並不在瀏覽器地址欄的那個網址裡,這個時候就需要通過上面的那個開發者工具方法去找。

有了網址,發出請求的代碼為:

<code>url = "https://www.biqiuge.com/book/4772/2940354.html"     #   要爬取數據的網址response = requests.get(url)       #發出訪問請求,獲得對應網頁/<code>

訪問請求的反饋結果放在response裡了,這時我們用print(response)看看這個結果到底是什麼?運行結果為:<response>

這是個什麼鬼?怎麼不是我們想要的網頁內容呢?解釋一下:

運行結果的意思是:響應狀態為成功。可以放心寫後面的代碼了。如果出現數字404,就是沒找到頁面的意思,響應不成功。響應結果還需要解析才能得到網頁內容。

2)、獲得網頁

上面說了,已經請求訪問並響應成功了,接下來就是如何獲得具體網頁內容了。

<code>soup = BeautifulSoup(response.content, 'lxml')     # 將獲得的網頁內容解析寫入soup備用/<code>

我們用print(soup)看一下結果,就會得到下圖3-6的結果:

最簡單的python爬蟲案例,適合入門學習

3-6 代碼得到的網頁內容

內容與前面在Preview裡看到的一樣,說明已經成功獲得了網頁內容。

3)、解析網頁內容,獲得數據

所有要爬取的數據,都在上面的soup結果裡,但還有更多是我們不需要的數據。所以接下來第3步就是對上面的結果內容進行操作,以獲得我們想要的內容。

1)根據目標,我們首先要獲得小說的標題和章節標題

在開發者工具裡,分析網頁內容,發現我們的目標之一小說和章節的標題分別位於下圖所示位置:

最簡單的python爬蟲案例,適合入門學習

圖3-7 找到標題所處位置

A、小說標題“聖墟”在下面兩個位置都出現過,寫解析代碼就可以了:

<code>
<code>

很明顯第一個相對比簡單點,所以,我們通過解析第一個位置內容來提取出標題“聖墟”

<code>t1 = soup.find('a', href="/book/4772/"').get_text()/<code>

代碼解析: 上面兩處標題都位於

B、章節標題在網頁代碼中也出現過多次,但是我們只需找到一處解析得到即可,根據上面的經驗,我們選最簡單的一處為:

<code>

第一章 沙漠中的彼岸花

/<code>

編寫代碼:

<code>t2 = soup.find('h1').get_text()/<code>

2)獲得小說內容

繼續分析網頁代碼,發現小說內容的位置為:


大漠孤煙直......

說明小說內容位於

之間,所以將div作為第一個參數,由於div出現了很多次,所以我們需要繼續用此處獨有的參數作為關鍵字,我們將id="content" class="showtxt"同時作為參數放到代碼裡,這樣代碼就為:
<code>tt = soup.find('div', id="content", class="showtxt").get_text()/<code>

此時,由於class在python裡代表“類”,為敏感詞,作為關鍵字放在代碼裡容易混淆,所以我們將敏感詞作為關鍵字時,需要在其後面加一個下劃線,將代碼class="showtxt"改為:class_="showtxt"。運行後,小說內容就已經在tt裡了。我們可以通過print(tt)看到效果。

4)、保存內容

雖然小說標題、內容都已經爬取到了,但到哪裡看呢,我們不可能每次都用python用print()運行後看。我們可以將剛才爬取到的標題、內容,寫入到一個txt文件裡。這就用到os模塊了。

<code>

此時運行程序,就能在e盤發現已新生成了文件“小說.txt文件",打開,發現,所有想要的內容已經寫入到文件裡瞭如圖3-8。但是小說內容沒有換行,閱讀起來不方便,且前面有個多餘的app2()。


最簡單的python爬蟲案例,適合入門學習

圖3-8 爬取的效果

為了達到更好的效果,我們將代碼:

<code>tt = soup.find('div', id="content", class="showtxt").get_text()/<code>

優化為:

<code>tt = soup.find('div', id="content", class_="showtxt").text.replace(' ','\\n').replace('app2();','\\n')/<code>

即將app2()和空格符都替換為換行符。運行後得到效果為:


最簡單的python爬蟲案例,適合入門學習

圖3-9 優化後最終的爬取結果

至此,一個簡單的爬取就完成了。

其實,該網址內容完全可以直接複製就能得到,本文之所以還大費周章進行爬取,不過是借用這個簡單的靜態網頁,體驗一下爬蟲4步驟的流程,為後續批量爬取網頁中的小說、圖片以及爬取動態網頁數據做基礎。

4、附錄本文代碼(完整)

<code># -*- coding:utf-8 -*-import requestsfrom bs4 import BeautifulSoup# 第一步:發出訪問請求url = "https://www.biqiuge.com/book/4772/2940354.html"response = requests.get(url)# 第二步:獲得網頁信息soup = BeautifulSoup(response.content, 'lxml')# 第三步:解析網頁數據t1 = soup.find('a', href="/book/4772/").get_text()t2 = soup.find('h1').get_text()tt = soup.find('div', id="content", class_="showtxt").text.replace(' ','\\n').replace('app2();','\\n')# 第四步:保存內容f = open(r"e:\\小說1.txt", 'a+', encoding='utf-8')f.write(t1 + '\\n')f.write(t2 + '\\n')f.write(tt)f.close()print('下載完成')/<code> 
"


分享到:


相關文章: