python 爬取小說并下載的示例
代碼
import requests
import time
from tqdm import tqdm
from bs4 import BeautifulSoup
"""
Author:
Jack Cui
Wechat:
https://mp.weixin.qq.com/s/OCWwRVDFNslIuKyiCVUoTA
"""
def get_content(target):
req = requests.get(url = target)
req.encoding = 'utf-8'
html = req.text
bf = BeautifulSoup(html, 'lxml')
texts = bf.find('div', id='content')
content = texts.text.strip().split('\xa0'*4)
return content
if __name__ == '__main__':
server = 'https://www.xsbiquge.com'
book_name = '詭秘之主.txt'
target = 'https://www.xsbiquge.com/15_15338/'
req = requests.get(url = target)
req.encoding = 'utf-8'
html = req.text
chapter_bs = BeautifulSoup(html, 'lxml')
chapters = chapter_bs.find('div', id='list')
chapters = chapters.find_all('a')
for chapter in tqdm(chapters):
chapter_name = chapter.string
url = server + chapter.get('href')
content = get_content(url)
with open(book_name, 'a', encoding='utf-8') as f:
f.write(chapter_name)
f.write('\n')
f.write('\n'.join(content))
f.write('\n')
下載效果:

可以看到,小說內容保存到“詭秘之主.txt”中,小說一共 1416 章,下載需要大約 20 分鐘,每秒鐘大約下載 1 個章節(jié)。
下載完成,實際花費了 27 分鐘。
20 多分鐘下載一本小說,你可能感覺太慢了。想提速,可以使用多進程,大幅提高下載速度。如果使用分布式,甚至可以1秒鐘內下載完畢。
但是,我不建議這樣做。
我們要做一個友好的爬蟲,如果我們去提速,那么我們訪問的服務器也會面臨更大的壓力。
以我們這次下載小說的代碼為例,每秒鐘下載 1 個章節(jié),服務器承受的壓力大約 1qps,意思就是,一秒鐘請求一次。
如果我們 1 秒同時下載 1416 個章節(jié),那么服務器將承受大約 1416 qps 的壓力,這還是僅僅你發(fā)出的并發(fā)請求數(shù),再算上其他的用戶的請求,并發(fā)量可能更多。
如果服務器資源不足,這個并發(fā)量足以一瞬間將服務器“打死”,特別是一些小網(wǎng)站,都很脆弱。
過大并發(fā)量的爬蟲程序,相當于發(fā)起了一次 CC 攻擊,并不是所有網(wǎng)站都能承受百萬級別并發(fā)量的。
所以,寫爬蟲,一定要謹慎,勿給服務器增加過多的壓力,滿足我們的獲取數(shù)據(jù)的需求,這就夠了。
你好,我也好,大家好才是真的好。
以上就是python 爬取小說并下載的示例的詳細內容,更多關于python 爬取小說下載的資料請關注腳本之家其它相關文章!
相關文章
Python內建模塊collections實現(xiàn)特殊容器數(shù)據(jù)類型
collections模塊是Python的內建模塊之一,它實現(xiàn)了特殊的容器數(shù)據(jù)類型,提供了Python內建的數(shù)據(jù)類型dict、list、set、和tuple的高效替代選擇2023-06-06
Python NumPy創(chuàng)建數(shù)組方法
這篇文章主要介紹了Python NumPy創(chuàng)建數(shù)組方法,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-09-09
python使用opencv在Windows下調用攝像頭實現(xiàn)解析
這篇文章主要介紹了python使用opencv在Windows下調用攝像頭實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11

