import requests
from pyquery import PyQuery as pq
s = requests.session()
catalog_url="http://www.xbiquge.la/15/15158/"
#小说目录页面链接
novelname="汉乡_test2.txt"
#需要生成的小说文件名
count_begin=1 #爬取的起始章节号
count_end=1491
#爬取的结束章节号。在浏览器调试页面的console(控制台),使用命令$("dd").size()得到所有dd标签的数量为1491。
def get_html(url):
headers =
{
'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0)
Gecko/20100101 Firefox/68.0",
'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
'Referer':"http://www.xbiquge.la/",
'Host':"www.xbiquge.la",
'Connection':"keep-alive"
}
#headers字典内容从小说目录页面浏览器调试器中获取
r =
s.get(url,headers=headers,verify=False)
r.encoding =
'utf-8'
return
r.text
#解析目录页面,返回“标题:章节链接”字典
def parse_catalog(html):
doc=pq(html)
catalog={}
for i in
range(count_begin,
count_end+1):
#range()为左闭右开,故括号右边界应设为count_end+1
url = "http://www.xbiquge.la" + str(doc("#list > dl >
dd:nth-child(" + str(i) + ") >
a").attr('href'))
#“#list”表示名称为list的ID选择器。
title = doc("#list > dl > dd:nth-child(" + str(i) + ") >
a").text()
catalog[title] = url
return
catalog
#解析章节页面,获取页面文字内容
def parse_html(html):
doc=pq(html)
text=doc("#content").text()
#获取ID选择器为content的文字内容
text
catalog_html=get_html(catalog_url)
catalog=parse_catalog(catalog_html)
#print(catalog)
'''
for title, url in catalog.items():
html=get_html(url)
text=parse_html(html)
print(text)
'''
with open(novelname, mode="a", encoding="utf-8") as
f:
for title,
url in catalog.items():
html=get_html(url)
text=parse_html(html)
print("正在下载-----------", title)
f.write(title)
f.write("\r\n")
f.write("\r\n")
f.write(text)
f.write("\r\n")
f.write("\r\n")
f.close()
(base) [python@ELK ~]$ python test2.py
正在下载----------- 第六章破茧
正在下载----------- 第七章穿衣为礼?
正在下载----------- 第八章生死?小事耳!
正在下载----------- 第九章努力成为一个贱人
正在下载----------- 第十章徐夫人的手艺