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

分享

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

 晴耕雨讀天 2020-04-05

一次爬多篇文章,邏輯是先從主網(wǎng)址爬到每篇文章的網(wǎng)址,再從各個網(wǎng)址處爬取文章,很簡單的靜態(tài)網(wǎng)頁爬取,不需考慮反扒問題。話不多說,直接案例說話。

實(shí)例:從https://www./book/24032/,爬取小說的全部章節(jié)的內(nèi)容。

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖1

實(shí)現(xiàn)方法:requests 訪問 + BeautifulSoup解析

1、目標(biāo)網(wǎng)址是靜態(tài)網(wǎng)頁,瀏覽網(wǎng)址和數(shù)據(jù)網(wǎng)址相同,可直接使用。

import requests # 導(dǎo)入requests庫from bs4 import BeautifulSoup # 導(dǎo)入BeautifulSoup庫url = ''https://www./book/23341/'' # 準(zhǔn)備好目標(biāo)網(wǎng)址

2、requests訪問網(wǎng)址獲得網(wǎng)頁

打開瀏覽器控制臺,查看Network下的Response發(fā)現(xiàn)有我們需要用的章節(jié)的標(biāo)題和鏈接,用requests訪問網(wǎng)址,就是為了獲取下圖中response界面下紅框的內(nèi)容。

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖2

requests訪問網(wǎng)址代碼:

import requestsfrom bs4 import BeautifulSoupurl = ''https://www./book/23341/''response= requests.get(url)                           #  requests訪問網(wǎng)址,獲得的內(nèi)容放入response

獲得的內(nèi)容放入response變量(自定義,可隨意?。├?。

3、BeautifulSoup解析網(wǎng)頁獲得內(nèi)容

用BeautifulSoup解析response變量里的內(nèi)容,方法為:

import requestsfrom bs4 import BeautifulSoupurl = ''https://www./book/23341/''response= requests.get(url)soup = BeautifulSoup(response.content, 'lxml') # BeautifulSoup解析response里的內(nèi)容,放入soup里

現(xiàn)在網(wǎng)頁內(nèi)容已經(jīng)被賦值到變量soup了,此時若打印s,會得到上面圖2紅框的內(nèi)容。

4、解析內(nèi)容爬取小說名,并用其創(chuàng)建一個文件夾,以備放后面下載的小說正文

通過在response里查找,我們發(fā)現(xiàn)標(biāo)題在圖3如下位置有出現(xiàn):

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖3

booktitle = soup.find('h1').textif not os.path.isdir(booktitle):  # 判斷當(dāng)前文件夾下是否存在和小說名同名的文件夾    os.makedirs(booktitle)  # 若不存在,則創(chuàng)建小說同名文件夾

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖4,爬取小說名

5、繼續(xù)用BeautifulSoup解析soup內(nèi)容,獲得章節(jié)標(biāo)題及網(wǎng)址

繼續(xù)在圖2response里查找,發(fā)現(xiàn)章節(jié)信息都在dd標(biāo)簽下的a標(biāo)簽里,如圖5:

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖5

提取章節(jié)標(biāo)題和鏈接代碼:

import requestsfrom bs4 import BeautifulSoup............dd = soup.find_all('dd')for i in range(len(dd)): title = dd[i].find('a').text # 獲得章節(jié)名 chap_url = dd[i].find('a')['href'] # 獲得章節(jié)鏈接 print(title, ': ', chap_url) # 臨時打印查看效果如下圖

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖6

5、循環(huán)遍歷訪問章節(jié)鏈接,獲得小說正文

通過上面的操作,我們獲得了每一章節(jié)頁面的具體網(wǎng)址鏈接,繼續(xù)用requests訪問鏈接,就能獲得小說的網(wǎng)頁頁面,接著用BeautifulSoup解析獲得小說內(nèi)容。我們可用簡單方法,快速找到小說內(nèi)容所在位置:在小說頁面正文區(qū)域右鍵單擊,選擇“檢查”或“審查元素”,會自動彈出瀏覽器控制臺并高亮顯示的正文在網(wǎng)頁頁面里的位置,分析確定提取參數(shù)即可。

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖7

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

自動高亮顯示位置

通過上面的操作,我們能輕松的找到小說文本在網(wǎng)頁里的位置,并能知道兩個參數(shù),標(biāo)簽:'div';id:'content',然后通過這兩個參數(shù)提取出小說文本。

import requestsfrom bs4 import BeautifulSoup............for i in range(len(dd)):    if i == 2:    #  臨時設(shè)置只看第3篇文章的打印效果,用于調(diào)試        title = dd[i].find('a').text        chap_url = dd[i].find('a')['href']        response1 = requests.get('https://www.' + chap_url) #訪問鏈接        soup1 = BeautifulSoup(response1.content, 'lxml')   # 獲得網(wǎng)頁        text = soup1.find('div', id='content').text   #解析網(wǎng)頁獲得小說正文        print(text)      # 試打印看效果

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

圖8,打印第3篇正文成功

6、保存結(jié)果

f = open(path + '/' + title + '.txt', 'a+', encoding='utf-8') # 設(shè)置章節(jié)標(biāo)題為文件名 f.write(text) # 寫入小說正文

至此,代碼完成,能放心下載了。

7、運(yùn)行效果

我們在完整代碼里,設(shè)置一次性下載100章節(jié)的代碼,來看看下載的效果。完整代碼:

import requests, osfrom bs4 import BeautifulSoupurl = 'https://www./book/23341/'response = requests.get(url)soup = BeautifulSoup(response.content, 'lxml') booktitle = soup.find('h1').textif not os.path.isdir(booktitle):  # 判斷當(dāng)前文件夾下是否存在和小說名同名的文件夾    os.makedirs(booktitle)  # 若不存在,則創(chuàng)建小說同名文件夾dd = soup.find_all('dd')for i in range(len(dd)):    if i < 100:        title = dd[i].find('a').text        chap_url = dd[i].find('a')['href']        response1 = requests.get('https://www.' + chap_url)        soup1 = BeautifulSoup(response1.content, 'lxml')        text = soup1.find('div', id='content').text        f = open(booktitle + '/' + title + '.txt', 'a+', encoding='utf-8')        f.write(text)        print('正在下載《 {} 》...... {} / {} '.format(title, i+1, len(dd)))    else:        breakprint('本次共下載 {} 章, 保存地址:{}'.format(i, os.getcwd() + '\\' + booktitle + '\\'))

運(yùn)行效果:

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

超詳細(xì)的python爬蟲案例,一次爬取上百篇文章

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多