04筆趣閣小說爬取 爬取整部小說

2021-10-06 23:24:13 字數 3696 閱讀 3818

考慮到爬取時間有點長,再加上一行資訊充當進度條。

完整**如下

import requests

from bs4 import beautifulsoup

# 獲取章節名稱和鏈結

target = '' # 目錄頁位址

req = requests.get(url = target)

# 使用beautifulsoup 篩選出id=list的div標籤

bf = beautifulsoup(req.text,"html.parser")

lists = bf.find_all('div',id='list')

lists = lists[0]

# 再次使用bs,從lists中篩選出所有的標籤a

bf_a = beautifulsoup(str(lists), 'html.parser') # 不加str()會報錯

a = bf_a.find_all('a')

titles = # 存放章節名稱

urls = # 存放章節鏈結

for s in a:

# 使用for迴圈爬取內容

for i in range(len(urls)):

title = titles[i] # 標題

url = urls[i] # 內容頁位址

req = requests.get(url = url)

# 使用beautifulsoup 篩選出id=content的div標籤

bf = beautifulsoup(req.text,"html.parser")

content = bf.find_all('div',id='content')

content = content[0].text

# 內容優化

content = content.replace('\r\n 一秒記住【筆趣閣 www.52bqg.com】,精彩**無彈窗免費閱讀!\r\n \xa0\xa0', '')

content = content.replace('\r\n\xa0\xa0','') # 去空行和段首空格,保留\n實現換行,保留2個空格使首行縮排2空格

content = '\n' + title + '\n' + content # 儲存的內容加上章節名稱

# 儲存到本地

file = open('卡徒.txt','a', encoding='utf-8') # 以追加模式,在當前目錄下建立並寫入,採用utf-8編碼

file.write(content)

file.close()

# 進度條

執行程式,開始很順利,但不久就卡住了,不報錯,也不往下繼續執行。

req = requests.get(url = url)
應該是這句,向伺服器的請求不能得到及時回應,然後就陷於假死狀態。那就給彵加上乙個回應時間看看。

req = requests.get(url=url, timeout=3)  # 相應時間為3秒
執行程式,很快程式報錯

大體意思應該是響應超時,之前的問題肯定也與這個有關。

for i in range(len(urls)):
改為

現在程式可以說處於手動狀態,執行程式時需要人在電腦前手動配合,這顯然不是我們想要的結果。

解決的思路是,當程式出現超時錯誤時,程式能夠再次傳送請求,直到獲得伺服器響應為止。

想到的方法是:while + try……except……

修改後的**如下:

import requests

from bs4 import beautifulsoup

# 獲取章節名稱和鏈結

target = '' # 目錄頁位址

req = requests.get(url = target)

# 使用beautifulsoup 篩選出id=list的div標籤

bf = beautifulsoup(req.text,"html.parser")

lists = bf.find_all('div',id='list')

lists = lists[0]

# 再次使用bs,從lists中篩選出所有的標籤a

bf_a = beautifulsoup(str(lists), 'html.parser') # 不加str()會報錯

a = bf_a.find_all('a')

titles = # 存放章節名稱

urls = # 存放章節鏈結

for s in a:

i = 0

while i <= len(urls):

title = titles[i] # 標題

url = urls[i] # 內容頁位址

try:

req = requests.get(url=url, timeout=3) # 相應時間為3秒

except:

req = requests.get(url=url, timeout=3) # 相應時間為3秒

# 使用beautifulsoup 篩選出id=content的div標籤

bf = beautifulsoup(req.text,"html.parser")

content = bf.find_all('div',id='content')

content = content[0].text

# 內容優化

content = content.replace('\r\n 一秒記住【筆趣閣 www.52bqg.com】,精彩**無彈窗免費閱讀!\r\n \xa0\xa0', '')

content = content.replace('\r\n\xa0\xa0','') # 去空行和段首空格,保留\n實現換行,保留2個空格使首行縮排2空格

content = '\n' + title + '\n' + content # 儲存的內容加上章節名稱

# 儲存到本地

file = open('卡徒.txt','a', encoding='utf-8') # 以追加模式,在當前目錄下建立並寫入,採用utf-8編碼

file.write(content)

file.close()

# 進度條

i = i + 1

執行程式,驗證一下。

可以看到,當響應時間過長時,會嘗試再次請求伺服器,保證程式繼續執行!!!

初級爬蟲爬取筆趣閣小說

import requests from pyquery import pyquery as pq def get content a response requests.get a response.encoding gbk doc pq response.text text doc conten...

Python爬蟲 筆趣閣小說爬取

import requests from lxml import etree以 我有百萬技能點 為例,在筆趣閣搜尋進入目錄頁,複製目錄頁url 對目錄頁的每個章節的url進行爬取,分析網頁利用xpath定位每個章節的url然後進行爬取,然後重新構造url。目錄每一章節的url href html e...

用爬蟲爬取筆趣閣小說

時間 2019年3月4日19 16 06 功能 爬取筆趣閣任何 from urllib import request from bs4 import beautifulsoup 此函式用來獲取每章對應的 並儲存 defsecondopenurl url,ch name 請求每章詳細內容 date r...