python爬取多网小说

软件主界面
小说预览界面

爬取小说完整代码在GIT中的地址:https://github.com/wenjiankui/books
CSDN代码资源下载地址:https://download.csdn.net/download/qq_39025957/14927458

一、系统环境

python3.7
pyqt5
Windows10 x64

二、讲解爬取小说过程

以爬取笔趣阁平台小说为例进行讲解,其他平台,是同一个思路

1、打开笔趣阁首页

在这里插入图片描述

2、在搜索框输入要小说名,点击搜索,

在这里插入图片描述

3、按F12调出开发者工具,然后刷新网页

在这里插入图片描述

4、找到获取小说信息的请求

在这里插入图片描述

5、点击上图的第五步,找到数据的请求地址和请求数据,获取到请求方式(post)

在这里插入图片描述
由此可以看出,每次请求的都是同一个地址,根据每次请求的不同
“searchkey”数据,来区别每次请求的数据
使用requests网络请求模块

pip install requsts		# 模块安装

代码实现

search_url = "http://www.xbiquge.la/modules/article/waps.php"
data = {
   'searchkey': "斗罗大陆"
}
res = requests.post(search_url, data)  # 进行post请求
res.encoding = 'utf-8'
print(res.text)
html = etree.HTML(res.text)  # <Element html at 0x7ff3fe0d6108>
print(html)

6、分析获取到的数据,找到小说存放地址

在这里插入图片描述

7、找到关键数据,小说地址、小说名称、作者

在这里插入图片描述
代码实现(接第5步代码)

book_root = html.xpath("//*[@class='grid']")
# print(book_root)
# print(etree.tostring(book_root[0]))

book_list = book_root[0].xpath("./tr")
del book_list[0]
# print(book_list)
# print(etree.tostring(book_list[0]))

if len(book_list) == 0:                # 搜索结果为空时
    return []

book_url_list = book_list[0].xpath("./td/a/@href")[0]
# print(book_url_list)
book_message = book_list[0].xpath("./td/a/text()")
# print(book_message)
book_user_list = book_list[0].xpath("./td/text()")[1]
# print(book_user_list)
book_list_meesage = []
for item in book_list:
    book_buf = {}
    book_buf["book_name"] = item.xpath("./td/a/text()")[0]
    book_buf["book_url"] = item.xpath("./td/a/@href")[0]
    book_buf["book_user"] = item.xpath("./td/text()")[1]
    book_buf["book_size"] = item.xpath("./td/a/text()")[1]

    book_list_meesage.append(book_buf)
    print(book_buf["book_name"], " : ", book_buf["book_user"], " : ", book_buf["book_size"])
    print(book_buf["book_url"])
    print("*********************************************")

8、进入该书列表,继续找到小说的请求

在这里插入图片描述

9、找到请求地址,获取请求方式(get)

在这里插入图片描述
根据刚刚已经获得的小说列表地址,
代码实现

"""
:param url: 传入需要爬取的网站
:return: 响应体
"""
response = requests.get(url)
# 自动解决乱码问题
response.encoding = response.apparent_encoding
# 将网页数据结构化
sel = parsel.Selector(response.text)
print(response.text)

10、分析网页结构,找到章节地址

在这里插入图片描述
代码实现(接第9步代码)

# 提取出书名
book_name = sel.xpath('//div[@id="info"]/h1/text()').get()
# 根据xpath提取每个章节目录地址
index = sel.xpath('//*[@id="list"]/dl/dd').getall()

print(book_name)
url_list = []
for i in index:
	# 得到的是章节地址的关键性数据,需要经过组合得到真正的地址
    get_url = "http://www.xbiquge.la" + re.match(r'(.*)"(.*?)".*', i).group(2)
    url_list.append(get_url)
    print(get_url)

11、进入小说章节,找到获取数据的请求

在这里插入图片描述

12、获取到请求方式(get)

在这里插入图片描述
代码实现

"""
:param url:需要爬取这一章小说的地址
"""
response = requests.get(url)
#自动解决乱码问题
response.encoding = response.apparent_encoding
print(response.text)
# 将网页数据结构化
sel = parsel.Selector(response.text)

13、分析网页结构,获取小说内容

在这里插入图片描述
代码实现,接第12步代码

 # 根据css选择器提取标题
chapter_title = sel.css('div.bookname > h1::text').get()
# 提取内容
content = sel.css('#content::text').getall()
chapter_data = []
# 去掉最后三行
for con in content:
    print(con)
    # str使用replace去除空格
    chapter_data.append(con.replace('\xa0', ""))

三、总结

爬取过程:

  1. 在首页获取到搜索请求的地址
  2. 在搜索框中输入小说名
  3. 在搜索结果中,找到小说地址
  4. 在小说章节列表中获取每一章节的地址
  5. 在每一章节中爬取小说内容

该帖子主要是讲如何在小说平台上爬取小说内容的过程,具体实现请参考git上的代码,看代码前,请认真阅读redme文档

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值