03笔趣阁小说爬取--爬取章节目录

现在已经能够爬取单章内容,如果要爬取整部小说,利用现在的代码就是:手动输入每一章的网址,然后运行代码……考虑到网络 小说动辄几百上千甚至上万的章节数,手动下载是一个十分艰苦漫长的任务!!

如果 能得到小说所有章节的链接,通过遍历所有链接就能下载整部小说了。、

从哪里找所有章节的链接?

打开卡徒的目录页(https://www.52bqg.com/book_12525/

在目录页点右键“查看网页源代码”,从源代码页中可以看到,小说所有章节的名称和链接都在这里。

现在要做的就是从目录页中提取出所有章节的名称和链接!

查看源代码,发现所有的章节名称和链接都在标签<div,id='list'>下的<a></a>里,比如:

<a href="6122965.html">第一节 以卡为生</a>

还是原来的配方,还是熟悉的味道,还是像内容页一样的操作有没有!

在Pycharm中新建'爬目录.py',代码如下:

import requests
from bs4 import BeautifulSoup

target = 'https://www.52bqg.com/book_12525/'  # 目录页地址
req = requests.get(url = target)
req.encoding = req.apparent_encoding  # 编码转换

# 使用beautifulsoup 筛选出id=list的div标签
bf = BeautifulSoup(req.text,"html.parser")
lists = bf.find_all('div',id='list')
lists = lists[0]

print(lists)

输出结果

现在需要从当前的结果中将所有的标签<a>筛选出来,再次使用bs。

import requests
from bs4 import BeautifulSoup

target = 'https://www.52bqg.com/book_12525/'  # 目录页地址
req = requests.get(url = target)
req.encoding = req.apparent_encoding  # 编码转换

# 使用beautifulsoup 筛选出id=list的div标签
bf = BeautifulSoup(req.text,"html.parser")
lists = bf.find_all('div',id='list')
lists = lists[0]

# 再次使用bs筛选出所有的标签a
bf_a = BeautifulSoup(str(lists), 'html.parser')  # 不加str()会报错
a = bf_a.find_all('a')
print(a)

输出结果

现在得到的是包含所有章节名称和链接的标签<a>列表,接下来使用for循环遍历a,使用a.string和a.get()得到章节名称和链接,并将章节名称存放在列表titles[]中,链接存放在列表urls[]中。

import requests
from bs4 import BeautifulSoup

target = 'https://www.52bqg.com/book_12525/'  # 目录页地址
req = requests.get(url = target)
req.encoding = req.apparent_encoding  # 编码转换

# 使用beautifulsoup 筛选出id=list的div标签
bf = BeautifulSoup(req.text,"html.parser")
lists = bf.find_all('div',id='list')
lists = lists[0]

# 再次使用bs,从lists中筛选出所有的标签a
bf_a = BeautifulSoup(str(lists), 'html.parser')  # 不加str()会报错
a = bf_a.find_all('a')

titles = []  # 存放章节名称
urls = []  # 存放章节链接
for s in a:
    titles.append(s.string)
    urls.append(s.get('href'))
    
print(titles)
print(urls)

得到的结果

发现一个问题,得到的链接不是完整链接。以第一节为例,完整链接为:

https://www.52bqg.com/book_12525/6122965.html

分析得出,每一章节的完整链接由小说的章节目录地址https://www.52bqg.com/book_12525/和列表中的链接地址6122965.html组合而成。

修改后的代码

import requests
from bs4 import BeautifulSoup

target = 'https://www.52bqg.com/book_12525/'  # 目录页地址
req = requests.get(url = target)
req.encoding = req.apparent_encoding  # 编码转换

# 使用beautifulsoup 筛选出id=list的div标签
bf = BeautifulSoup(req.text,"html.parser")
lists = bf.find_all('div',id='list')
lists = lists[0]

# 再次使用bs,从lists中筛选出所有的标签a
bf_a = BeautifulSoup(str(lists), 'html.parser')  # 不加str()会报错
a = bf_a.find_all('a')

titles = []  # 存放章节名称
urls = []  # 存放章节链接
for s in a:
    titles.append(s.string)
    urls.append(target + s.get('href'))  # 完整链接 

print(titles)
print(urls)

修改后的输出结果


 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值