python小说爬虫练习

本篇文章主要用于记录爬虫练习,所以具体网址将不显示(如果真的出现没有完全打码的情况请联系我,谢谢!),希望大家支持正版!

需求描述

通过爬取盗版小说网站数据,获取某本书的章节目录信息及指定章节的文本内容,生成.txt文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最终效果展示

选择指定章节生成txt文本,可以在手机阅读器查看。
在这里插入图片描述

步骤拆解

1. 获取章节信息(URL及名称)

1.1 采用requests模块获取html返回内容

# -*- coding: utf-8 -*-
import requests
import random
url = "http://********/"#说好的不给你们看哦
headers1 = [{
   'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"},
            {
   'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 "}]
headers=random.choice(headers1)#随机选择某一headers,减少反爬虫可能
r = requests.get(url, headers=headers)
r.encoding = "utf-8" #解决乱码问题
r.text

输出结果:
在这里插入图片描述

1.2 采用bs4中BeautifulSoup模块解析返回文本

from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text, 'html.parser')
soup

输出结果:
在这里插入图片描述

通过Chrome检查功能,我们可以确认目录菜单在该网页body id='list" 的布局处。

list12 = soup.body.find_all("div", id="list")
list12

在这里插入图片描述
输出为list格式,只有一个元素。

1.3. 对list进行解析,转化为目录的字典列表

import re
#转化为str格式,并删除无效内容
list13 = str(list12[0]).replace('<div id="list">', '').replace('<dl>', '').replace('</dl>', '').replace('</div>', '')
#以 <dd><a href=" 作为每个章节的间隔,形成新的list
list1 = list13.split('<dd><a href="')
lenth = len(list1)
title_list=[]
nn = 1
for n in range(1, lenth):
    dict1 = {
   }
    place= list1[n].find('">')
    url1 = list1[n][0:place]
    #有些章节以"正文 "开头,需要去掉,方便下一步排除非正文部分
    title = list1[n][place+2:-10].replace("正文 ","") 
    #排除非正文的部分,re.S:"."代表全部
    if re.match("^第.{0,6}(章|张|篇)", title, re.S
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值