考慮到爬取時間有點長,再加上一行資訊充當進度條。
完整**如下
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...