用PYTHON爬蟲簡單爬取網路小說

lotus_ruan發表於2021-09-11

用PYTHON爬蟲簡單爬取網路小說

用PYTHON爬蟲簡單爬取網路小說。

這裡是17K小說網上,隨便找了一本小說,名字是《千萬大獎》。

裡面主要是三個函式:

1、get_download_url() 用於獲取該小說的所有章節的URL。

分析了該小說的目錄頁的HTML原始碼,發現其目錄是包含在Volume裡的A標籤合集。所以就提取出了URLS列表。

2、get_contents(target) 用於獲取小說指定章節的正文內容

分析了小說中第一章節的頁面,發現其正文內容包含在P標籤中,正文標題包含在H1標籤中,經過對換行等處理,得到正文內容。傳入引數是上一函式得到的URL。

3、writer(name, path, text) 用於將得到的正文內容和章節標題寫入到千萬大獎.txt

理論上,該簡單爬蟲可以爬取該網站的任意小說。

from bs4 import BeautifulSoup
import requests, sys
'''
遇到不懂的問題?Python學習交流群:821460695滿足你的需求,資料都已經上傳群檔案,可以自行下載!
'''
target=''
server=''
urls=[]

def get_download_url():
    req = requests.get(url = target)
    html = req.text
    div_bf = BeautifulSoup(html,'lxml')
    div = div_bf.find_all('dl', class_ = 'Volume')
    a_bf = BeautifulSoup(str(div[0]),'lxml')
    a = a_bf.find_all('a')
    for each in a[1:]:
        urls.append(server + each.get('href'))


def get_contents(target):
        req = requests.get(url = target)
        html = req.text
        bf = BeautifulSoup(html,'lxml')
        title=bf.find_all('div', class_ = 'readAreaBox content')
        title_bf = BeautifulSoup(str(title[0]),'lxml')
        title = title_bf.find_all('h1')
        title=str(title[0]).replace('<h1>','')
        title=str(title).replace('</h1>','')
        title=str(title).replace(' ','')
        title=str(title).replace('n','')
        texts = bf.find_all('div', class_ = 'p')
        texts=str(texts).replace('<br/>','n')
        texts=texts[:texts.index('本書首發來自17K小說網,第一時間看正版內容!')]
        texts=str(texts).replace('                                          ','')
        return title,str(texts[len('[<div class="p">'):])

def writer(name, path, text):
        write_flag = True
        with open(path, 'a', encoding='utf-8') as f:
            f.write(name + 'n')
            f.writelines(text)
            f.write('n')


#title,content=get_contents(target)
#print(title,content)
#writer(title,title+".txt",content)
get_download_url()
#print(urls)
i=1
for url in urls:
    title,content=get_contents(url)
    writer(title,"千萬大獎.txt",content)
    print(str(int(i/len(urls)*100))+"%")
    i+=1

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

相關文章