最近剛學習了Python,所以做了一個Python 的爬蟲,爬取147的小說。
可以參觀下我的部落格:我的部落格
剛學習Python,有什麼不足的地方大佬請指出
分析147網頁結構
可以通過谷歌,使用F12
開啟控制檯
發現章節列表是由<dd></dd>
包裹
章節標題是由<div class="bookname"></div>
下的H1
標籤包裹
章節內容是由 <div id="content"></div>
下的P
標籤包裹
廢話不多說,上程式碼
#爬取147小說網站的小說
# -*- coding: utf-8 -*-
import requests
import re
import random
import time
#實現抓取章節內容
def GetChapterContent(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
'Cookie':'Hm_lvt_f9e74ced1e1a12f9e31d3af8376b6d63=1588752082; Hm_lpvt_f9e74ced1e1a12f9e31d3af8376b6d63=1588756920',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3'}
cookies = dict(Hm_lpvt_f9e74ced1e1a12f9e31d3af8376b6d63="1588758919",Hm_lvt_f9e74ced1e1a12f9e31d3af8376b6d63="1588752082")
res = requests.get(url,headers=headers,cookies=cookies)
res.encoding = 'utf-8'
content_html = res.text
# 獲取到標題
title_div=re.findall(r'<div class="bookname">([\s\S]*?)</div>',content_html)[0]
title = re.findall(r'<h1>(.*?)</h1>', title_div, re.S)[0]
#獲取內容
content_div = re.findall(r'<div id="content">([\s\S]*?)</div>', content_html)[0]
contents = re.findall(r'<p>(.*?)</p>', content_div, re.S)
# 把標題和內容組合
content = ''
content += title + "\n"
for i in contents:
content += i + "\n"
#然後返回內容
return content
#實現抓取章節內容url
def GetChapterList(url):
res = requests.get(url)
res.encoding = 'utf-8'
chapter_html = res.text
#獲取到章節列表
chapter_list_div = re.findall(r'<dl>([\s\S]*?)</dl>',chapter_html)[0]
#獲取到章節列表以及連結
chapter_list_dd = re.findall(r'<dd>(.*?)</dd>',chapter_list_div)
chapter_url_info = []
for info in chapter_list_dd:
chapter_list_info = re.findall(r'href="(.*?)">(.*?)<',info)[0]
chapter_url = "http://www.147xs.org" + chapter_list_info[0]
chapter_url_info.append([chapter_url,chapter_list_info[1]])
return chapter_url_info
url="http://www.147xs.org/book/13794/"
chapter_urls = GetChapterList(url)
for url in chapter_urls:
content = GetChapterContent(url[0])
#把內容儲存到檔案
try:
with open("./xiaoshuo.txt","a+",encoding="UTF-8") as f:
f.write(content)
print("章節:{} 抓取成功".format(url[1]))
except Exception:
print("章節:{} 抓取失敗".format(url[1]))
time.sleep(random.random()) # 暫停0~1秒,時間區間:[0,1]
print("抓取成功")
本作品採用《CC 協議》,轉載必須註明作者和本文連結