用python從網(wǎng)頁爬取數(shù)據(jù),網(wǎng)上相關(guān)文章很多,但能讓零基礎(chǔ)初學者輕松上手的卻很少??赡苁怯械淖髡哂X得有些知識點太簡單不值得花費精力講,結(jié)果是難者不會會者不難,初學者常常因此而蒙圈。本人也是小白,剛摸索著爬了兩個簡單的網(wǎng)頁數(shù)據(jù),經(jīng)歷了初學者易犯的各種糊涂,特總結(jié)分享一下,希望能對小白們有用。
1、本文代碼環(huán)境:python3.7,requests模塊、BeautifulSoup解析庫
python爬網(wǎng)絡(luò)數(shù)據(jù),方法很多。不同的python版本、不同的模塊、庫,對應代碼都不同。所以,在看他人代碼時,需要搞清代碼環(huán)境所用的版本和使用的模塊庫等信息。因為如果環(huán)境不同,相同的代碼也可能沒用。初學者往往看到一篇文章講的代碼,復制過來就用,結(jié)果就是各種錯誤,這就是因為環(huán)境不同造成的。
沒有模塊的,pip安裝一下就好。安裝方法:點擊電腦左下角開始——輸入cmd回車,彈出cmd.exe界面——在界面上輸入pip install requests回車,稍后,提示安裝成功即完成了requests模塊的安裝。BeautifulSoup解析庫是屬于bs4模塊的一個功能塊,所以,用pip安裝時,要安裝pip install bs4。
2、爬蟲4部曲:發(fā)出請求——獲得網(wǎng)頁——解析內(nèi)容——保存內(nèi)容
建好了代碼環(huán)境,就可以開始爬數(shù)據(jù)了,無論什么代碼環(huán)境,爬蟲核心都是這4步。對新手來說,每一步都不簡單,我們通過一個簡單的爬取一篇小說代碼,來看看到底是怎么爬數(shù)據(jù)的。
3、爬取網(wǎng)絡(luò)小說
如圖3-1,我們試著把這篇小說爬下來保存為txt文件,按照爬蟲4部曲,我們逐步來看:
1)、發(fā)出請求
用代碼向網(wǎng)絡(luò)發(fā)出請求,請求訪問某個網(wǎng)址,首先我們得在代碼中給出具體的網(wǎng)址信息,比如上面截圖的網(wǎng)址是:
https://www.biqiuge.com/book/4772/2940354.html
那這個網(wǎng)址是怎么得到的呢,常規(guī)方法是通過瀏覽器的開發(fā)者工具,我是用的360瀏覽器,點擊右上角的工具菜單,點擊開發(fā)者工具即可,打開后的界面如下圖3-2:
頂部菜單選擇Network,中間圓圈選擇Preview,通過選擇左側(cè)紅色方框內(nèi)的不同選項,觀察Preview下部的內(nèi)容,當能看到我們想要的文字時人(如圖3-3),就說明找到了。
這時點擊Preview左側(cè)的Header面板,得到下圖3-4中的url就是我們要找的網(wǎng)址。復制后,粘貼到代碼里就能發(fā)出請求了。
有細心的會看到,這個網(wǎng)址和我們平常瀏覽網(wǎng)頁時地址欄里的網(wǎng)址一樣啊,還用這么麻煩?
這兩個網(wǎng)址確實是一樣的,是不用這么麻煩,直接從地址欄復制就可以。但很多時候,我們要爬取的網(wǎng)頁數(shù)據(jù)并不在瀏覽器地址欄的那個網(wǎng)址里,這個時候就需要通過上面的那個開發(fā)者工具方法去找。
有了網(wǎng)址,發(fā)出請求的代碼為:
url = "https://www.biqiuge.com/book/4772/2940354.html" # 要爬取數(shù)據(jù)的網(wǎng)址
response = requests.get(url) #發(fā)出訪問請求,獲得對應網(wǎng)頁
訪問請求的反饋結(jié)果放在response里了,這時我們用print(response)看看這個結(jié)果到底是什么?運行結(jié)果為:<Response [200]>
這是個什么鬼?怎么不是我們想要的網(wǎng)頁內(nèi)容呢?解釋一下:
運行結(jié)果的意思是:響應狀態(tài)為成功??梢苑判膶懞竺娴拇a了。如果出現(xiàn)數(shù)字404,就是沒找到頁面的意思,響應不成功。響應結(jié)果還需要解析才能得到網(wǎng)頁內(nèi)容。
2)、獲得網(wǎng)頁
上面說了,已經(jīng)請求訪問并響應成功了,接下來就是如何獲得具體網(wǎng)頁內(nèi)容了。
soup = BeautifulSoup(response.content, 'lxml') # 將獲得的網(wǎng)頁內(nèi)容解析寫入soup備用
我們用print(soup)看一下結(jié)果,就會得到下圖3-6的結(jié)果:
內(nèi)容與前面在Preview里看到的一樣,說明已經(jīng)成功獲得了網(wǎng)頁內(nèi)容。
3)、解析網(wǎng)頁內(nèi)容,獲得數(shù)據(jù)
所有要爬取的數(shù)據(jù),都在上面的soup結(jié)果里,但還有更多是我們不需要的數(shù)據(jù)。所以接下來第3步就是對上面的結(jié)果內(nèi)容進行操作,以獲得我們想要的內(nèi)容。
1)根據(jù)目標,我們首先要獲得小說的標題和章節(jié)標題
在開發(fā)者工具里,分析網(wǎng)頁內(nèi)容,發(fā)現(xiàn)我們的目標之一小說和章節(jié)的標題分別位于下圖所示位置:
A、小說標題“圣墟”在下面兩個位置都出現(xiàn)過,寫解析代碼就可以了:
<a href="/book/4772/">圣墟</a>
<a href='https://www.biqiuge.com/book/4772/' target='_blank' title="圣墟">圣墟</a>
很明顯第一個相對比簡單點,所以,我們通過解析第一個位置內(nèi)容來提取出標題“圣墟”
t1 = soup.find('a', href="/book/4772/"').get_text()
代碼解析: 上面兩處標題都位于<a,…/a>之間,所以“a”就是我們要用的第一個參數(shù),由于有a參數(shù)的代碼還有很多,為了精準定位就是這個位置的a,我們發(fā)現(xiàn)屬性href的值不同而且貌似是獨一無二的,所以將其作為關(guān)鍵字放進代碼里,就得到了此處的這段代碼。然后用.get_text()將這段代碼里的文字給爬取出來,就得到了我們最終想要的小說標題——“圣墟”。上面的代碼如果將href的參數(shù)值改為:’
https://www.biqiuge.com/book/4772/',也能得到相同的結(jié)果
B、章節(jié)標題在網(wǎng)頁代碼中也出現(xiàn)過多次,但是我們只需找到一處解析得到即可,根據(jù)上面的經(jīng)驗,我們選最簡單的一處為:
<h1>第一章 沙漠中的彼岸花</h1>
編寫代碼:
t2 = soup.find('h1').get_text()
2)獲得小說內(nèi)容
繼續(xù)分析網(wǎng)頁代碼,發(fā)現(xiàn)小說內(nèi)容的位置為:
< div id=“content” class=“showtxt”>
大漠孤煙直…
說明小說內(nèi)容位于<div …/div >之間,所以將div作為第一個參數(shù),由于div出現(xiàn)了很多次,所以我們需要繼續(xù)用此處獨有的參數(shù)作為關(guān)鍵字,我們將id=“content” class="showtxt"同時作為參數(shù)放到代碼里,這樣代碼就為:
tt = soup.find('div', id="content", class="showtxt").get_text()
此時,由于class在python里代表“類”,為敏感詞,作為關(guān)鍵字放在代碼里容易混淆,所以我們將敏感詞作為關(guān)鍵字時,需要在其后面加一個下劃線,將代碼class="showtxt"改為:class_=“showtxt”。運行后,小說內(nèi)容就已經(jīng)在tt里了。我們可以通過print(tt)看到效果。
4)、保存內(nèi)容
雖然小說標題、內(nèi)容都已經(jīng)爬取到了,但到哪里看呢,我們不可能每次都用python用print()運行后看。我們可以將剛才爬取到的標題、內(nèi)容,寫入到一個txt文件里。這就用到os模塊了。
此時運行程序,就能在e盤發(fā)現(xiàn)已新生成了文件“小說.txt文件",打開,發(fā)現(xiàn),所有想要的內(nèi)容已經(jīng)寫入到文件里了如圖3-8。但是小說內(nèi)容沒有換行,閱讀起來不方便,且前面有個多余的app2()。
為了達到更好的效果,我們將代碼:
tt = soup.find('div', id="content", class="showtxt").get_text()
優(yōu)化為:
tt = soup.find('div', id="content", class_="showtxt").text.replace(' ','\n').replace('app2();','\n')
即將app2()和空格符都替換為換行符。運行后得到效果為:
至此,一個簡單的爬取就完成了。
其實,該網(wǎng)址內(nèi)容完全可以直接復制就能得到,本文之所以還大費周章進行爬取,不過是借用這個簡單的靜態(tài)網(wǎng)頁,體驗一下爬蟲4步驟的流程,為后續(xù)批量爬取網(wǎng)頁中的小說、圖片以及爬取動態(tài)網(wǎng)頁數(shù)據(jù)做基礎(chǔ)。
4、附錄本文代碼(完整)
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
# 第一步:發(fā)出訪問請求
url = "https://www.biqiuge.com/book/4772/2940354.html"
response = requests.get(url)
# 第二步:獲得網(wǎng)頁信息
soup = BeautifulSoup(response.content, 'lxml')
# 第三步:解析網(wǎng)頁數(shù)據(jù)
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')
# 第四步:保存內(nèi)容
f = open(r"e:\小說1.txt", 'a+', encoding='utf-8')
f.write(t1 + '\n')
f.write(t2 + '\n')
f.write(tt)
f.close()
print('下載完成')
關(guān)于Python技術(shù)儲備
學好 Python 不論是就業(yè)還是做副業(yè)賺錢都不錯,但要學會 Python 還是要有一個學習規(guī)劃。最后大家分享一份全套的 Python 學習資料,給那些想學習 Python 的小伙伴們一點幫助!
一、Python所有方向的學習路線
Python所有方向的技術(shù)點做的整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
二、Python必備開發(fā)工具
三、精品Python學習書籍
當我學到一定基礎(chǔ),有自己的理解能力的時候,會去閱讀一些前輩整理的書籍或者手寫的筆記資料,這些筆記詳細記載了他們對一些技術(shù)點的理解,這些理解是比較獨到,可以學到不一樣的思路。
四、Python視頻合集
觀看零基礎(chǔ)學習視頻,看視頻學習是最快捷也是最有效果的方式,跟著視頻中老師的思路,從基礎(chǔ)到深入,還是很容易入門的。
五、實戰(zhàn)案例
光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學習。
六、Python練習題
檢查學習結(jié)果。
七、面試資料
我們學習Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
這份完整版的Python全套學習資料已經(jīng)上傳CSDN,朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認證二維碼免費領(lǐng)取【保證100%免費
】
文章來源:http://www.zghlxwxcb.cn/news/detail-478055.html
Python資料、技術(shù)、課程、解答、咨詢也可以直接點擊下面名片,
添加官方客服斯琪
↓
文章來源地址http://www.zghlxwxcb.cn/news/detail-478055.html
到了這里,關(guān)于最簡單的python爬蟲案例,適合入門學習的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!