一次爬多篇文章,邏輯是先從主網(wǎng)址爬到每篇文章的網(wǎng)址,再從各個網(wǎng)址處爬取文章,很簡單的靜態(tài)網(wǎng)頁爬取,不需考慮反扒問題。話不多說,直接案例說話。 實(shí)例:從https://www./book/24032/,爬取小說的全部章節(jié)的內(nèi)容。 圖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)容。 圖2 requests訪問網(wǎng)址代碼:
獲得的內(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): 圖3
圖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: 圖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) # 臨時打印查看效果如下圖 圖6 5、循環(huán)遍歷訪問章節(jié)鏈接,獲得小說正文 通過上面的操作,我們獲得了每一章節(jié)頁面的具體網(wǎng)址鏈接,繼續(xù)用requests訪問鏈接,就能獲得小說的網(wǎng)頁頁面,接著用BeautifulSoup解析獲得小說內(nèi)容。我們可用簡單方法,快速找到小說內(nèi)容所在位置:在小說頁面正文區(qū)域右鍵單擊,選擇“檢查”或“審查元素”,會自動彈出瀏覽器控制臺并高亮顯示的正文在網(wǎng)頁頁面里的位置,分析確定提取參數(shù)即可。 圖7 自動高亮顯示位置 通過上面的操作,我們能輕松的找到小說文本在網(wǎng)頁里的位置,并能知道兩個參數(shù),標(biāo)簽:'div';id:'content',然后通過這兩個參數(shù)提取出小說文本。
圖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é)的代碼,來看看下載的效果。完整代碼:
運(yùn)行效果: |
|