爬取斗破苍穹
文章目錄
- 前言
- 一、爬取步驟
- 1.獲取每一章的網址
- 2.爬取章節的題目和內容
- 3.將每一章節保存為txt格式并存入對應文件夾
- 二、成果展示
- 三、源代碼
- 總結
前言
最近在看python爬蟲開發從入門到實戰 微課版這本書,其中第四章后面的動手實踐是在網上尋找一個小說網站,下載感興趣的小說。于是作為一個看了十幾遍斗破蒼穹的我,果斷選擇爬取斗破蒼穹。
一、爬取步驟
1.獲取每一章的網址
通過查看源代碼或者利用開發者人員工具找到所有章節的鏈接附近的特征式子,來進行正則表達式匹配。
2.爬取章節的題目和內容
查看頁面源代碼爬取標題,其中…只出現了一次,可以用來作為爬取標題。
查看網頁源代碼來爬取內容,以
…
里面的,所以可以用replace來替換,以求得到好看的形式。3.將每一章節保存為txt格式并存入對應文件夾
利用如下代碼來判斷文件夾是否存在。
os.makedirs('斗破蒼穹', exist_ok=True)再構造文件路徑。
os.path.join('斗破蒼穹', chapter + '.txt')寫文件就不加贅述了。
二、成果展示
三、源代碼
import os import requests#獲取每一章的網址 def get_toc(html):toc_url_list = []toc_block = re.findall('<div class="catalog">(.*?)</div>', html, re.S)[0]toc_url = re.findall('href="(.*?)"', toc_block, re.S)start_url = 'https://read.aixdzs.com/38/38804/'for url in toc_url:toc_url_list.append(start_url + url)return toc_url_list#獲取每一章的標題和內容并且整理格式 def get_article(html):chapter_name = re.search('<title>(.*?)</title>', html, re.S).group(1)if chapter_name:chapter_name = chapter_name.replace('斗破蒼穹_', '')chapter_name = chapter_name.replace(' -愛下電子書', '')text_block = re.search('<div class="content">(.*?)</div>', html, re.S).group(1)text_block = text_block.replace('</p><p>', '\n')text_block = text_block.replace('<p>?', '')text_block = text_block.replace('</p>', '\n')text_block = text_block.replace('武林中文網.,最快更新斗破蒼穹最新章節!', '')return chapter_name, text_block#將每一章節保存為txt格式并存入對應文件夾 def save(chapter, article):os.makedirs('斗破蒼穹', exist_ok=True)with open(os.path.join('斗破蒼穹', chapter + '.txt'), 'w', encoding='UTF-8') as f:f.write(article)html_all = requests.get('https://read.aixdzs.com/38/38804/').content.decode('UTF-8') list_1 = get_toc(html_all) for i in list_1:html_each = requests.get(i).content.decode('UTF-8')chapter1, article1 = get_article(html_each)save(chapter1, article1)總結
本次源代碼的核心框架來自我最近看的一本名為python爬蟲開發從入門到實戰 微課版的書,不過因為爬的網站不同,所以正則表達式的內容略有修改。后因為本人技術水平低,沒有用多線程爬蟲,導致爬200多章就需要15分鐘,另外一個問題就是爬到了249章后因為有一些作者的拉月票章節導致后續爬蟲無法繼續進行,以后寫爬蟲一定要注意對特殊情況的處理。
總結
- 上一篇: Cesium 场景设置~黑白、夜视和描边
- 下一篇: 《高等代数学》(姚慕生),复习题一,第1