Python爬蟲系列之小說網爬取
阿新 • • 發佈:2018-11-11
今日爬蟲—小說網
再次宣告所有爬蟲僅僅為技術交流,沒有任何惡意,若有侵權請☞私信☚
此次爬取由主頁爬取到各本小說地址,然後通過這些地址獲取到小說目錄結構,在通過目錄結構獲取章節內容,同時以小說名字為資料夾,每一個章節為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的爬蟲小例子,歡迎關注。♪♪
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪