1. 程式人生 > >Python基礎練習(二)筆趣看《伏天氏》全文章節爬取

Python基礎練習(二)筆趣看《伏天氏》全文章節爬取

平臺 空行 ges 會有 好的 clas 追加 ref 版本

大家如果覺得有幫助的話,可以關註我的知乎https://www.zhihu.com/people/hdmi-blog/posts,裏面有寫了一些我學習爬蟲的練習~ 今天我們想要爬取的是筆趣看小說網上的網絡小說,並將其下載,保存為文件。 運行平臺:Windows Python版本:Python3.6 IDE:Sublime Text 其他:Chrome瀏覽器 步驟1:通過Chrome瀏覽器檢查元素 步驟2:獲取單個頁面HTML文本 步驟3:解析HTML文本並獲取所有章節的名稱和鏈接 步驟4:獲取每個章節的文本並簡單修改格式 步驟5:將獲取的內容存成txt文件 首先還是打開瀏覽器查看網頁中元素位置,打開網頁,右鍵檢查 技術分享圖片 技術分享圖片 可以清楚的看到,各章節鏈接和名稱都在class為‘listmain‘的塊中,而文章內容則在class為‘showtxt‘的塊中,所以等下我們用BeautifulSoup解析HTML文本時便能跟很方便的提取信息。 技術分享圖片

技術分享圖片

檢查完元素位置之後我們便可以訪問網頁並去獲取網頁HTML文本了。 技術分享圖片

同樣使用上一篇所講的通用代碼框架來獲取網頁HTML文本,這裏我將return response.text給註釋掉了,改用print,我們可以先看一下輸出結果。

技術分享圖片

不管標簽樣式之類,只看文本的話,確實和網頁中一樣,這證明我們能成功訪問了網頁並獲取到了網頁的HTML文本。

隨後我們需要解析章節信息,獲取《伏天氏》所有的章節名稱和URL,便於我們下一步獲取章節內容。 技術分享圖片 技術分享圖片 第一步的審查告訴我們,所有的章節信息都放在了class為listmain的塊中,所以我們使用BeautifulSoup解析完文本後,再使用find()方法找到這塊內容,再用for循環找到 所有章節信息,然後分別存放到鏈接和章節名稱列表中。 獲取到各章節鏈接後,就可以通過訪問各鏈接,然後再解析各文本獲取各章節內容了。 技術分享圖片

章節內容都在class為showtxt的塊中,我們將其提取出來會發現每一行的開始會有8個&nbsp(如下圖所示),這個是HTML中的占位符,普通的空格在HTML中只能算一個,而這個占位符則是寫幾個算幾個空格。但是在這裏我們並不需要顯示空格,所以我們可以replace給替換掉,轉為空行顯示。

技術分享圖片 技術分享圖片

提取章節內容的同時,我們可以同時寫入文件。

技術分享圖片

這裏文件操作時,我用的‘a’追加模式,因為不是同時寫入,而是通過對章節循環,循環獲取章節信息的同時寫入文件。在循環的同時,引入了time.sleep()方法,休息1秒,使得訪問頻率有所下降,避免對服務器造成負擔。

技術分享圖片

這裏的tqdm是Python的一個進度條模塊,可以用來顯示下載進度。但可惜,不知道為什麽,在windows下使用這個模塊,進度條並不能正常顯示,如圖所示,會出現換行輸出的格式,修改固定寬度也沒用,如果有大佬知道原因和修改方式,還望不吝賜教,感激不盡。

技術分享圖片 技術分享圖片

這個進度條不怎麽讓人滿意,當然,進度條也可以用sys模塊自己構建。這裏就不做說明了,盡管這個tqdm沒有很好的顯示,但是小說內容還是完整的爬取下來了。

技術分享圖片 技術分享圖片 代碼如下:
import requests
from bs4 import BeautifulSoup
from tqdm import tqdm
import time
 
 
def get_one_page(all_url):
    ‘‘‘獲取單個頁面的HTML文本‘‘‘
    try:
        response = requests.get(all_url,timeout=20)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        #print(response.text)
        return response.text
    except:
        print(‘Failed‘)
        return None
 
 
def parse_all_pages(html,urls,chapter_name):
    ‘‘‘解析章節信息並存入列表‘‘‘
    soup = BeautifulSoup(html,‘html.parser‘)
    chapters = soup.find(‘div‘,class_=‘listmain‘)
    for dd in chapters.find_all(‘a‘)[12:]:
        urls.append(dd.get(‘href‘))
        chapter_name.append(dd.text)
 
 
def parse_one_chapter(content):
    ‘‘‘解析並返回章節內容‘‘‘
    soup = BeautifulSoup(content,‘html.parser‘)
    #title = soup.find(‘div‘,class_=‘content‘).find(‘h1‘).text
    texts = soup.find_all(‘div‘,class_=‘showtxt‘)[0].text.replace(‘\xa0‘*8,‘\n\n‘)
    return texts
 
 
def write_to_file(chapter_name,texts):
    ‘‘‘將章節內容寫入txt文件‘‘‘
    with open (‘《伏天氏》.txt‘,‘a‘,encoding=‘utf-8‘) as f:
        f.write(chapter_name + ‘\n‘)
        f.write(texts)
        f.write(‘\n\n‘)
 
 
def main():
    urls = [] # 存放鏈接的列表
    chapter_name = [] # 存放章節名稱的列表
    all_url = ‘http://www.biqukan.com/0_243/‘
    html = get_one_page(all_url)
    parse_all_pages(html,urls,chapter_name)
    print(‘《伏天氏》開始下載。。。‘)
    for i in tqdm(range(len(chapter_name))):
        url = ‘http://www.biqukan.com‘+ urls[i]
        content = get_one_page(url)
        texts = parse_one_chapter(content)
        write_to_file(chapter_name[i],texts)
        time.sleep(1)
    print(‘《伏天氏》下載完成。。。‘)
 
 
if __name__ == ‘__main__‘:
    main()
 

  

《伏天氏》是網文大神凈無痕所寫的東方玄幻小說,還在連載中哦,小說寫得很好看呢,當然,大家還是要支持凈無痕大大,去起點中文網訂閱這本精彩的小說吧。 這篇文章參考於Jack-Cui的知乎文章https://www.zhihu.com/people/Jack--Cui/裏面還介紹了許多爬蟲的知識,另外還有圖片和視頻爬取的案例,大家可以去學習呀。

Python基礎練習(二)筆趣看《伏天氏》全文章節爬取