近来比较清闲,想学习一些东西,刚好最近正在入我师兄的坑,于是想自己写一个python爬虫下载这本小说,方便自己的后续阅读。
一、爬虫的基本步骤
不管是多么复杂的爬虫,它的流程永远是分为以下几个部分:
一、发起请求
通过HTTP库向目标站点发起请求,也就是发送一Request,请求可以包含额外的header等信息,等待服务器响应;
二、获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型;
三、解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理;
四、保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。
二、爬虫的编写过程
由于是第一次编写爬虫,能力有限,所以自己只能设置为指定的网站地址:http://www.paoshu8.com/131_131325/
下载内容存放地址:D:\novel\
一、发起请求:
link = "http://www.paoshu8.com/131_131325/"
headers = {
'Cookie': 'td_cookie = 405542359;width = 85 % 25;Hm_lpvt_9352f2494d8aed671d970e0551ae3758 = 1596682842;Hm_lvt_9352f2494d8aed671d970e0551ae3758 = 1596677570',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'
}
aders可以在浏览器打开小说网站时,按F12进入开发者调试工具,然后点击network,选择一个目标网站的访问记录,点击之后会在屏幕左侧显示一个请求标头,其中就有上述代码中需要的请求。如果点击目标网站的访问记录没有需要的请求,可以再换一个目标网站的访问记录即可。
二、获取响应内容:
response = requests.get(link, headers=headers) ##获取响应内容
print(response.encoding) ##查看网站的编码方式
response.encoding = 'utf-8' ##以UTF-8解码(有的网站是以gbk方式解码的)
html = response.text ##将获取到的内容编码成字符串
soup = BeautifulSoup(html, 'lxml') ##解析html文件
soup = str(soup) ##将获取到的内容转换成字符类型,不然后面的正则表达式会出错
上述代码的功能就是将获取到的内容进行转换和处理,使之变成我们能够理解的形式。
三、解析内容和下载内容:
title = re.findall(r'<dt>.*?</dt>', soup) ##正则表达式,将<dt>和</dt>之间内容过滤出来,这样就可以得到小说的名字
print(title)
title = title[1] ##根据显示的内容选取小说的名字
title = title.replace('<dt>', '') ##清洗小说名
title = title.replace('</dt>', '')
title = title.replace('正文', '')
print(title)
上述代码的运行结果如