1. 程式人生 > >Python爬蟲系列之小說網爬取

Python爬蟲系列之小說網爬取

今日爬蟲—小說網

再次宣告所有爬蟲僅僅為技術交流,沒有任何惡意,若有侵權請☞私信☚

此次爬取由主頁爬取到各本小說地址,然後通過這些地址獲取到小說目錄結構,在通過目錄結構獲取章節內容,同時以小說名字為資料夾,每一個章節為txt文字儲存到本地。

  • 話不多說,直接上程式碼
  • 歡迎探討
import urllib.request
import re
import os
import time
'''
	@Author:王磊
	@Time  :2018/11/10 15:39:02
'''

def get_html(url):
    '''獲取url介面資料'''
    page =
urllib.request.Request(url) html = urllib.request.urlopen(page).read().decode("utf-8") #print(html) return html def get_all_index(): '''獲取站點下所有小數的目錄地址以及小說名稱''' html = get_html("http://book.zongheng.com/store/c0/c0/b0/u0/p1/v9/s1/t0/u0/i1/ALL.html") #print(html) # reg = re.compile(r'<div class="bookname"><a href="(.*?)" target="_blank">(.*?)</a></div>'
) reg = re.compile(r'<a href="(http://book.zongheng.com/book/.*?.html)" target="_blank">(.*?)</a>') urls_names = re.findall(reg, html) res_list = [] for url_name in urls_names: mete_list = [] html_in = get_html(url_name[0]) reg_in = re.compile(r'<a class="all-catalog".*?href="(.*?)">'
) url_mete = re.findall(reg_in, html_in) url_mete.append(url_name[1]) res_list.append(url_mete) return res_list def get_urls_titles_list(html): '''獲取目錄下當前元素的章節內容地址以及章節名稱''' reg = re.compile(r'<a href="(.*?)" target="_blank".*?>(.*?)</a>') urls_titles = re.findall(reg, html) #print(urls_titles) return urls_titles def get_content(url): '''通過章節內容地址獲取章節內容''' html = get_html(url) reg1 = re.compile(r'<p>(.*?)</p>') # reg1 = re.compile(r'<div class="title_txtbox">(.*?)</div>') content = re.findall(reg1, html)[0:-1] str1 = "" for str0 in content: str1 += str0 + "\r\n" return str1 def run(): #獲取站點書名地址目錄資料 books = get_all_index() for book in books: # 建立儲存目錄地址 if not os.path.exists("C:\\Users\\asus\\Desktop\\pc\\story\\" + book[1]): os.mkdir("C:\\Users\\asus\\Desktop\\pc\\story\\" + book[1]) #獲取頁面資料 html = get_html(book[0]) #獲取介面地址 urls_titles_list = get_urls_titles_list(html) print("*" * 10 + "開始下載書籍:《%s》" % book[1] + "*" * 10) if len(urls_titles_list) != 0: list_err = [] print("開始下載章節!") for url_title in urls_titles_list: print("正在下載章節:", url_title[1]) try: content = get_content(url_title[0]) with open("C:\\Users\\asus\\Desktop\\pc\\story\\" + book[1] + "\\" + url_title[1] + ".txt", "a", encoding="utf-8") as f: f.write(content) print("章節:%s下載成功!" % url_title[1]) except Exception as e: list_err.append(url_title[1]) print("章節:%s下載失敗!" % url_title[1]) continue #防止ip過度活躍,降低下載速度 time.sleep(1) if len(list_err) == 0: print("《" + book[1] + "》所有章節已經下載完成!沒有失敗下載的章節!") else: print("《%s》以下章節下載失敗:" % book[1]) for errdownload in list_err: print(errdownload) else: print("操作頻繁導致站點黑名單識別或網路異常!請稍後嘗試或更新ip地址!") time.sleep(3) if __name__ == "__main__": run()

☞點選這裡與我探討☚

♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
♪♪後續會更新系列基於Python的爬蟲小例子,歡迎關注。♪♪
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪