#!/user/bin/env python3
# -*- coding: utf-8 -*-
import requests
import re
# 下载一个网页
url='http://www.liudatxt.com/so/10818/'
# 模拟浏览器发出请求
response=requests.get(url)
# 目标小说网页(正确编码后解码)
html=response.text.encode(response.encoding).decode(response.apparent_encoding)
#获取每一章的信息(url、章节)
dl=re.findall(r'<h3>第一卷 诗成惊鬼神</h3>.*?</ul>',html,re.S)
chapter_url=re.findall(r'/so/.*?html',dl[0]) #只有str可以findall
chapter_title=re.findall(r'">.*?<',dl[0])#findall好像可以用()匹配+筛选出想要的字段,而不用再转化
chapter_title=list(map(lambda x:''.join(list(x)[2:-1]),chapter_title))
chapter_info=list(zip(chapter_url,chapter_title))
#新建一个文件,保存小说内容
fb=open('%s.txt'%'儒道至圣','w',encoding='utf-8')
#循环每一个章节,分别去下载
for chapter in chapter_info:
chapter_url,chapter_title=chapter
chapter_url='http://www.liudatxt.com%s'%chapter_url
#下载章节内容
chapter_response=requests.get(chapter_url)
chapter_html=chapter_response.text.encode(chapter_response.encoding).decode(chapter_response.apparent_encoding)
#提取章节内容,用ctrl+f网页搜索确保前缀和后缀字段是唯一的
chapter_content=re.findall(r'<div id="content">.*?<script type="text/javascript">read_bot',chapter_html,re.S)[0]
#清洗数据,replace比较简单,如果要彻底清洗干净,用re.sub函数进行替换会更好
chapter_content=chapter_content.replace('<div id="content">','')
chapter_content=chapter_content.replace(' ','')
chapter_content=chapter_content.replace('<br/>','')
chapter_content=chapter_content.replace('</div>','')
chapter_content=chapter_content.replace('<script type="text/javascript">read_bot','')
#数据持久化(写入数据)
fb.write(chapter_title)
fb.write(chapter_content)
fb.write('\n')
print(chapter_url)
网友评论