如何用python爬蟲下載小說?

25minutes發表於2021-09-11

如何用python爬蟲下載小說?

小編發現比起看實體書,用手機看小說才是廣大小夥伴喜歡做的事情。不得不說,小編也很喜歡用手機看小夥,因為實體書拿著不方便,而且看完放著挺浪費的。當然網上的小說也不是所有都能看的,這裡小編就想用爬蟲來獲取一些小說,應該有不少可以實現的。喜歡看小說的小夥伴一起來看看接下來如何操作吧。


只要利用 requests 和 Beautifulsoup 模組就可以獲取到每一章節的 url 集合了。

import requests
from bs4 import BeautifulSoup
 
html = requests.get(url)
soup = BeautifulSoup(html.text, 'lxml')
all_td = soup.find_all('td', class_="L")
for a in all_td:
    all_urls = a.find('a').get('href')
print(all_urls)


獲取所有章節 url 之後,自然是獲取每一個頁面的內容,然後解析出小說的內容,儲存到資料夾。這裡又要用到 requests,我們寫個函式複用。

def get_html(url):
    # 偽裝瀏覽器的頭,這部大家應該都理解:
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
    html = requests.get(url,headers=headers)
return html


獲取小說內容也很簡單,BeautifulSoup 解析出網頁,如果直接用 BeautifulSoup 透過提取網頁 html 標籤來獲取小說的話,會出現排版問題,不夠美觀。這裡我們仍然用正則匹配小說內容。

for each in all_urls:
    soup = BeautifulSoup(get_html(each).text, 'lxml')
    # 獲取章節標題
    title = soup.title.text.split('-')[1]
    all_info = soup.find('dd', id="contents")
    # 使用正則匹配章節內容
    p = r'<dd id="contents">(.*?)</dd>'
    # 處理正則在匹配錯誤章節,都是作者牢騷的內容,不影響小說內容抓取,直接過濾
    try:
        info = re.findall(p, str(all_info), re.S)[0]
        # 下載到txt檔案
        with open(title + '.txt', 'w', encoding='gbk', errors='ignore') as f:
            f.write(info.replace('<br/>', 'n'))
    print('save sucessful: %s' % title)
    except:
        print('re faild: %s' % title)


到這裡我們的小說就已經收穫囊中了,喜歡看小說的小夥伴們還在等什麼,趕緊試著用小編的方法把自己喜歡的內容下載出來吧。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4328/viewspace-2831959/,如需轉載,請註明出處,否則將追究法律責任。

相關文章