当你看了上一节中只能爬取一章的小说,而且还有许多不需要的字符时,是不是很不过瘾呢!这一节将一步一步分析,如何用30行不到的代码将小说章节全部爬下来,并且分章节保存进txt文件。
- 分析网址
http://www.biqugew.com/book/9/4446.html
这是小说第一章的网址,你可能发现不了什么特别的,
http://www.biqugew.com/book/9/4448.html
这是第二章网址,你可能就会发现什么了,当时多看几章的网址之后,你会发现这个网址会变的只是从4446到4448,下一章便是4450.这么一说是不是有思路了呢?
所以只需用循环将所有的网址拼接起来,然后让程序自己一个一个去爬即可!
# !/user/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'DF'
import requests
import re
# 第一章网址上的数字
base_num = 4446
# 打算爬多少章,手动修改
page = 100
for i in range(page):
# 根据每章网址可知该数字每次加2
num = base_num + i * 2
# 拼接网址
url = 'http://www.biqugew.com/book/9/%s' % (num) + '.html'
# 使用requests的get方法获取response对象
response = requests.get(url)
# 转换编码格式,不然显示文字格式不对
response.encoding = 'gbk'
# 获取网页源码
str_url = response.text
# 将小说文字提取出来,
str_novel = ''
str_novel = str_novel + re.findall('<div id="content">([^(][\s\S]+?)</div>', str_url)[0]
# 将小说此章标题提取出来
str_title = ''
str_title = re.findall('<h1>([^(][\s\S]+?)</h1>', str_url)[0]
# 此时的str_novel中还有 和<br />等不需要的字符,继续剔除
str_novel = str_novel.replace(' ', ' ')
str_novel = str_novel.replace('<br />', '')
# 然后将其保存进文件
with open(str_title+".txt", "w", encoding='utf-8')as f:
f.write(str_novel)
当你遇到不知道的函数时,不要慌!,因为并不多,而且只需百度一下,即可知道该函数可以做什么!
当你发现你代码文件夹下多出的小说文件,是不是很兴奋了呢。加油