小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

 hanxinhanxin 2020-03-19

用python從網(wǎng)頁(yè)爬取數(shù)據(jù),網(wǎng)上相關(guān)文章很多,但能讓零基礎(chǔ)初學(xué)者輕松上手的卻很少??赡苁怯械淖髡哂X(jué)得有些知識(shí)點(diǎn)太簡(jiǎn)單不值得花費(fèi)精力講,結(jié)果是難者不會(huì)會(huì)者不難,初學(xué)者常常因此而蒙圈。本人也是小白,剛摸索著爬了兩個(gè)簡(jiǎn)單的網(wǎng)頁(yè)數(shù)據(jù),經(jīng)歷了初學(xué)者易犯的各種糊涂,特總結(jié)分享一下,希望能對(duì)小白們有用。

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

1、本文代碼環(huán)境:python3.7,requests模塊、BeautifulSoup解析庫(kù)

python爬網(wǎng)絡(luò)數(shù)據(jù),方法很多。不同的python版本、不同的模塊、庫(kù),對(duì)應(yīng)代碼都不同。所以,在看他人代碼時(shí),需要搞清代碼環(huán)境所用的版本和使用的模塊庫(kù)等信息。因?yàn)槿绻h(huán)境不同,相同的代碼也可能沒(méi)用。初學(xué)者往往看到一篇文章講的代碼,復(fù)制過(guò)來(lái)就用,結(jié)果就是各種錯(cuò)誤,這就是因?yàn)榄h(huán)境不同造成的。

沒(méi)有模塊的,pip安裝一下就好。安裝方法:點(diǎn)擊電腦左下角開(kāi)始——輸入cmd回車,彈出cmd.exe界面——在界面上輸入pip install requests回車,稍后,提示安裝成功即完成了requests模塊的安裝。BeautifulSoup解析庫(kù)是屬于bs4模塊的一個(gè)功能塊,所以,用pip安裝時(shí),要安裝pip install bs4。

2、爬蟲4部曲:發(fā)出請(qǐng)求——獲得網(wǎng)頁(yè)——解析內(nèi)容——保存內(nèi)容

建好了代碼環(huán)境,就可以開(kāi)始爬數(shù)據(jù)了,無(wú)論什么代碼環(huán)境,爬蟲核心都是這4步。對(duì)新手來(lái)說(shuō),每一步都不簡(jiǎn)單,我們通過(guò)一個(gè)簡(jiǎn)單的爬取一篇小說(shuō)代碼,來(lái)看看到底是怎么爬數(shù)據(jù)的。

3、爬取網(wǎng)絡(luò)小說(shuō)

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

3-1 擬爬取的網(wǎng)絡(luò)小說(shuō)截圖

如圖3-1,我們?cè)囍堰@篇小說(shuō)爬下來(lái)保存為txt文件,按照爬蟲4部曲,我們逐步來(lái)看:

1)、發(fā)出請(qǐng)求

用代碼向網(wǎng)絡(luò)發(fā)出請(qǐng)求,請(qǐng)求訪問(wèn)某個(gè)網(wǎng)址,首先我們得在代碼中給出具體的網(wǎng)址信息,比如上面截圖的網(wǎng)址是:https://www./book/4772/2940354.html

那這個(gè)網(wǎng)址是怎么得到的呢,常規(guī)方法是通過(guò)瀏覽器的開(kāi)發(fā)者工具,我是用的360瀏覽器,點(diǎn)擊右上角的工具菜單,點(diǎn)擊開(kāi)發(fā)者工具即可,打開(kāi)后的界面如下圖3-2:

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

圖3-2 開(kāi)發(fā)者工具窗口

頂部菜單選擇Network,中間圓圈選擇Preview,通過(guò)選擇左側(cè)紅色方框內(nèi)的不同選項(xiàng),觀察Preview下部的內(nèi)容,當(dāng)能看到我們想要的文字時(shí)人(如圖3-3),就說(shuō)明找到了。

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

圖3-3 箭頭指示的就是準(zhǔn)備爬取的數(shù)據(jù)

這時(shí)點(diǎn)擊Preview左側(cè)的Header面板,得到下圖3-4中的url就是我們要找的網(wǎng)址。復(fù)制后,粘貼到代碼里就能發(fā)出請(qǐng)求了。

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

圖3-4 找到請(qǐng)求的網(wǎng)址

有細(xì)心的會(huì)看到,這個(gè)網(wǎng)址和我們平常瀏覽網(wǎng)頁(yè)時(shí)地址欄里的網(wǎng)址一樣啊,還用這么麻煩?

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

3-5 瀏覽器地址欄網(wǎng)址

這兩個(gè)網(wǎng)址確實(shí)是一樣的,是不用這么麻煩,直接從地址欄復(fù)制就可以。但很多時(shí)候,我們要爬取的網(wǎng)頁(yè)數(shù)據(jù)并不在瀏覽器地址欄的那個(gè)網(wǎng)址里,這個(gè)時(shí)候就需要通過(guò)上面的那個(gè)開(kāi)發(fā)者工具方法去找。

有了網(wǎng)址,發(fā)出請(qǐng)求的代碼為:

url = "https://www./book/4772/2940354.html"     #   要爬取數(shù)據(jù)的網(wǎng)址
response = requests.get(url) #發(fā)出訪問(wèn)請(qǐng)求,獲得對(duì)應(yīng)網(wǎng)頁(yè)

訪問(wèn)請(qǐng)求的反饋結(jié)果放在response里了,這時(shí)我們用print(response)看看這個(gè)結(jié)果到底是什么?運(yùn)行結(jié)果為:<Response [200]>

這是個(gè)什么鬼?怎么不是我們想要的網(wǎng)頁(yè)內(nèi)容呢?解釋一下:

運(yùn)行結(jié)果的意思是:響應(yīng)狀態(tài)為成功??梢苑判膶懞竺娴拇a了。如果出現(xiàn)數(shù)字404,就是沒(méi)找到頁(yè)面的意思,響應(yīng)不成功。響應(yīng)結(jié)果還需要解析才能得到網(wǎng)頁(yè)內(nèi)容。

2)、獲得網(wǎng)頁(yè)

上面說(shuō)了,已經(jīng)請(qǐng)求訪問(wèn)并響應(yīng)成功了,接下來(lái)就是如何獲得具體網(wǎng)頁(yè)內(nèi)容了。

soup = BeautifulSoup(response.content, 'lxml')     # 將獲得的網(wǎng)頁(yè)內(nèi)容解析寫入soup備用

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

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

3-6 代碼得到的網(wǎng)頁(yè)內(nèi)容

內(nèi)容與前面在Preview里看到的一樣,說(shuō)明已經(jīng)成功獲得了網(wǎng)頁(yè)內(nèi)容。

3)、解析網(wǎng)頁(yè)內(nèi)容,獲得數(shù)據(jù)

所有要爬取的數(shù)據(jù),都在上面的soup結(jié)果里,但還有更多是我們不需要的數(shù)據(jù)。所以接下來(lái)第3步就是對(duì)上面的結(jié)果內(nèi)容進(jìn)行操作,以獲得我們想要的內(nèi)容。

1)根據(jù)目標(biāo),我們首先要獲得小說(shuō)的標(biāo)題和章節(jié)標(biāo)題

在開(kāi)發(fā)者工具里,分析網(wǎng)頁(yè)內(nèi)容,發(fā)現(xiàn)我們的目標(biāo)之一小說(shuō)和章節(jié)的標(biāo)題分別位于下圖所示位置:

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

圖3-7 找到標(biāo)題所處位置

A、小說(shuō)標(biāo)題“圣墟”在下面兩個(gè)位置都出現(xiàn)過(guò),寫解析代碼就可以了:

<a href="/book/4772/">圣墟</a>
<a href='https://www./book/4772/' target='_blank' title="圣墟">圣墟</a>

很明顯第一個(gè)相對(duì)比簡(jiǎn)單點(diǎn),所以,我們通過(guò)解析第一個(gè)位置內(nèi)容來(lái)提取出標(biāo)題“圣墟”

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

代碼解析: 上面兩處標(biāo)題都位于<a,....../a>之間,所以“a”就是我們要用的第一個(gè)參數(shù),由于有a參數(shù)的代碼還有很多,為了精準(zhǔn)定位就是這個(gè)位置的a,我們發(fā)現(xiàn)屬性href的值不同而且貌似是獨(dú)一無(wú)二的,所以將其作為關(guān)鍵字放進(jìn)代碼里,就得到了此處的這段代碼。然后用.get_text()將這段代碼里的文字給爬取出來(lái),就得到了我們最終想要的小說(shuō)標(biāo)題——“圣墟”。上面的代碼如果將href的參數(shù)值改為:'https://www./book/4772/',也能得到相同的結(jié)果

B、章節(jié)標(biāo)題在網(wǎng)頁(yè)代碼中也出現(xiàn)過(guò)多次,但是我們只需找到一處解析得到即可,根據(jù)上面的經(jīng)驗(yàn),我們選最簡(jiǎn)單的一處為:

<h1>第一章 沙漠中的彼岸花</h1>

編寫代碼:

t2 = soup.find('h1').get_text()

2)獲得小說(shuō)內(nèi)容

繼續(xù)分析網(wǎng)頁(yè)代碼,發(fā)現(xiàn)小說(shuō)內(nèi)容的位置為:

<div id="content" class="showtxt"><script>app2();</script><br /> 大漠孤煙直......

說(shuō)明小說(shuō)內(nèi)容位于<div ....../div >之間,所以將div作為第一個(gè)參數(shù),由于div出現(xiàn)了很多次,所以我們需要繼續(xù)用此處獨(dú)有的參數(shù)作為關(guān)鍵字,我們將id="content" class="showtxt"同時(shí)作為參數(shù)放到代碼里,這樣代碼就為:

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

此時(shí),由于class在python里代表“類”,為敏感詞,作為關(guān)鍵字放在代碼里容易混淆,所以我們將敏感詞作為關(guān)鍵字時(shí),需要在其后面加一個(gè)下劃線,將代碼class="showtxt"改為:class_="showtxt"。運(yùn)行后,小說(shuō)內(nèi)容就已經(jīng)在tt里了。我們可以通過(guò)print(tt)看到效果。

4)、保存內(nèi)容

雖然小說(shuō)標(biāo)題、內(nèi)容都已經(jīng)爬取到了,但到哪里看呢,我們不可能每次都用python用print()運(yùn)行后看。我們可以將剛才爬取到的標(biāo)題、內(nèi)容,寫入到一個(gè)txt文件里。這就用到os模塊了。

此時(shí)運(yùn)行程序,就能在e盤發(fā)現(xiàn)已新生成了文件“小說(shuō).txt文件",打開(kāi),發(fā)現(xiàn),所有想要的內(nèi)容已經(jīng)寫入到文件里了如圖3-8。但是小說(shuō)內(nèi)容沒(méi)有換行,閱讀起來(lái)不方便,且前面有個(gè)多余的app2()。

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

圖3-8 爬取的效果

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

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()和空格符都替換為換行符。運(yùn)行后得到效果為:

最簡(jiǎn)單的python爬蟲案例,適合入門學(xué)習(xí)

圖3-9 優(yōu)化后最終的爬取結(jié)果

至此,一個(gè)簡(jiǎn)單的爬取就完成了。

其實(shí),該網(wǎng)址內(nèi)容完全可以直接復(fù)制就能得到,本文之所以還大費(fèi)周章進(jìn)行爬取,不過(guò)是借用這個(gè)簡(jiǎn)單的靜態(tài)網(wǎng)頁(yè),體驗(yàn)一下爬蟲4步驟的流程,為后續(xù)批量爬取網(wǎng)頁(yè)中的小說(shuō)、圖片以及爬取動(dòng)態(tài)網(wǎng)頁(yè)數(shù)據(jù)做基礎(chǔ)。

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

# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup

# 第一步:發(fā)出訪問(wèn)請(qǐng)求
url = "https://www./book/4772/2940354.html"
response = requests.get(url)

# 第二步:獲得網(wǎng)頁(yè)信息
soup = BeautifulSoup(response.content, 'lxml')

# 第三步:解析網(wǎng)頁(yè)數(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:\小說(shuō)1.txt", 'a+', encoding='utf-8')
f.write(t1 + '\n')
f.write(t2 + '\n')
f.write(tt)
f.close()
print('下載完成')

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多