利用Python 3 爬取网络小说(三、获取目录)

需要说明一下,写这篇文章的初衷并不是真的想要看小说,而是出于练手的目的,仅供大家学习交流之用,如果真的想看小说,经济允许的情况下还是建议大家支持正版

小说网站: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)

猜你喜欢

转载自blog.csdn.net/sh15774842048/article/details/88996654