在线观看多费劲呀,不如爬下来看
小说网站地址:/
分析:
第一种方法:
首先随便打开一个小说章节详情页,比如莽荒记
发现这个详情页,居然包含了所有章节的url。
故第一种实现思路就是从这个页面找到所有章节的url,存为一个列表,然后批量去匹配小说内容下载小说。
第二种方法:
在第一个章节点开任意 一章小说,对页面进行分析
发现这里有下一章的链接,
故方法二就是在当前页面找到下一章的链接,然后循环执行批量下载小说,只要拿到小说章节的url一切都好说。
第三种方法:
通过观察连续每一章的url:
小说地址:/book/44/44683/
章节规律:页面翻页规律
章节1:/book/51/51030/16813025.html
章节2:/book/51/51030/16813026.html
章节3:/book/51/51030/16813027.html
/book/44/44683/15379612.html
......
.......
最后一章的url:/book/51/51030/18021855.html
,,这网站居然没更新完本。。这就尴尬了,
不过我们还是能
发现规律
连续章节url
=/book/51/51030/168130+章节数.html
所以第三种方法只是简单的拼接url就ok 了。
总结经验:爬虫的实现方法有多种,主要还是看你实现这种爬虫的实现思路,通过几种方法来比较哪一种方法比较简单实用。
第二种方法的代码实现:
'''
小说地址:/book/51/51030
小说章节第一章:/book/51/51030/16813025.html
by:北冥
'''
importrequests#网络请求模块
importre#正则表达式模块
frombs4importBeautifulSoup#解析网页模块
importsys#防出错模块
defgetContent(content_url,i):
try:
i=i+1#循环调用直到下完为止,如果找不到下一章的url程序会报错。
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
res = requests.get(content_url,headers= header,timeout=10)#开始请求
res.encoding ='gbk'#设置编码
soup = BeautifulSoup(res.text,'html.parser')#解析页面html
title = soup.select('.jieqi_title')[0].text.lstrip('章 节目录 ')#开始搜索章节
print(title)#终端打印章节
content = soup.select('#content')[0].text.lstrip('style5();').rstrip('style6();')#小说内容
both = title + content#章节+内容
next_url = soup.select('.next')[0]['href']#在当前页面搜索下一章
print(both,file= f)#写入文件
print(i)#终端打印章节
returngetContent(next_url,i)#反复调用函数
except:
print('下载完成啦', sys.exc_info()[0], sys.exc_info()[1])
#出错返回
#以下是调用过程
f =open("莽荒记.txt",'w+',encoding='utf-8')#保存在当前目录
i=0
getContent('/book/51/51030/16813025.html',i)#第一章的url传进去
f.close()
print('ok!')
以下是代码整体图,好看点