需要说明一下,写这篇文章的初衷并不是真的想要看小说,而是出于练手的目的,仅供大家学习交流之用,如果真的想看小说,经济允许的情况下还是建议大家支持正版
小说网站:https://www.x4399.com/(笔趣阁)
编辑器:Notepad++、Adobe Dreamweaver CS6
浏览器:Chrome
标准库:urllib( HTTP 请求库)
第三方库:
- pyquery(网页解析库,jQuery的Python版本)
- requests(可以理解为urllib的升级版,处理URL资源特别方便)
上篇代码:
from pyquery import PyQuery as pq #导入网页解析模块
from urllib import parse #导入解码模块
import requests
PATH = r'C:\Users\Administrator\Desktop\\'
name = input('请输入小说或作者名:\n')
r = requests.get('https://www.x4399.com/modules/article/search.php', params={'searchkey':name.encode('gbk')})
r.encoding = 'gbk'
with open(PATH + '1.html', 'w',encoding='gbk') as f:
f.write(r.text)
现在我们已经能够正常获取到书籍的详情页了,所以就不需要写入文件了,可以使用 pyquery 转化为 pq 对象, pyquery 的使用方法这里我不多做赘述,不懂的小伙伴可以查看 Charles.L 大佬的 pyquery基础教程
代码更新为:
name = input('请输入小说或作者名:\n')
r = requests.get('https://www.x4399.com/modules/article/search.php', params={'searchkey':name.encode('gbk')})
r.encoding = 'gbk'
doc = pq(r.text, parser="html")
接下来我们就要继续分析书籍的详情页面了,依旧是找到目录所在区域,右键->检查,如图:
这里我们可以看到,目录的内容都包含在 class 为 box_con 的 div 里,每一个 dd 标签都包含一个章节的标题和链接
利用 pyquery 便捷的选择器选取所有的章节元素并输出:
for value in doc('.box_con dd a').items():
print(value)
因为 pyquery 返回的数据是一个生成器(generator),所以我们使用for循环获取全部数据:
可以看到已经获取到了数据,我们将链接与标题分离开来,存入 list ,方便调用:
contents = []
for value in doc('.box_con dd a').items():
contents.append([value.text(), value.attr.href])
print(contents)
输出查看结果:
好了,书籍目录已经获取到了,下篇实现爬取正文
本篇完整代码:
from pyquery import PyQuery as pq #导入网页解析模块
from urllib import parse #导入解码模块
import requests
PATH = r'C:\Users\Administrator\Desktop\\'
name = input('请输入小说或作者名:\n')
r = requests.get('https://www.x4399.com/modules/article/search.php', params={'searchkey':name.encode('gbk')})
r.encoding = 'gbk'
doc = pq(r.text, parser="html")
contents = []
for value in doc('.box_con dd a').items():
contents.append([value.text(), value.attr.href])
print(contents)