项目目的:爬取斗罗大陆小说的所有章节并保存为txt文件
具体步骤
- 获得小说每一个章节的超链接
- 使用requests获取网页源代码
- 使用BeautifulSoup对网页源代码进行分析
- 使用re正则表达式匹配得到章节的超链接
- 获取文本
- 分析网页,获得合理的网页获取步骤
- 然后使用合理的方式获取文字
- 保存文本
- 将文字保存在文本中
第一步;观察小说目录网页源代码,从中获得提取每一个章节超链接的方式
url = 'http://www.quanshuwang.com/book/44/44683'
这是目标网页的链接
从图片中可以看出,每一个章节的链接以及章节的名称都在<li><a>标签下,其他与章节链接不想管的信息都不是保存在此标签下
那么可以使用正则表达式匹配一行字符串,之后再使用 re.findall(reg)获取所有相似的链接
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
urls = re.findall(reg,html)
此时获得的是一个列表,其中每一个元素都是一个元祖,由超链接以及对应的章节名称组成
此时已经获得每一个章节的超链接
那么 下面需要做的就是根据已有的超链接跟踪获取其文本信息
下面是章节的源代码
避免重复造轮子,我们可以创建一个函数,要求是传入一个url可以获得url对应的文本并保存在文件中
def getText(url): # 获得章节文本的函数
html = requests.get(url) # 获得html
html.encoding = html.apparent_encoding # 修改编码,当不知道网站的编码格式时可以使用这个方式
reg = ' (.+)' # 正则表达式的式子
reg = re.compile(reg) # 我看攻略说使用这个可以加快匹配速度
text = re.findall(reg,html.text) # 匹配
# 这个操作是为了保存文件
# 由于匹配的文本中含有不想要的字符串,因此通过replace方法将字符串替换
with open('斗罗大陆001.txt','a') as f:
for t in text:
if text[-1] == t:
t = t.replace('<script type="text/javascript">style6();</script></div>','')
f.write(t)
f.write('\n')
else:
t = t.replace('<br />',' ')
f.write(t)