Python 爬虫复习之爬取笔趣阁小说网站(不用正则)

本文介绍了如何使用Python3.6和相关库从笔趣阁网站爬取《终极斗罗》小说,详细阐述了抓取单章内容、提取有用信息、获取章节名和URL以及将内容保存为TXT文档的步骤。
摘要由CSDN通过智能技术生成

前言

小说网站-笔趣阁:URL:https://www.qu.la/

笔趣阁是一个盗版小说网站,这里有很多起点中文网的小说,该网站小说的更新速度稍滞后于起点中文网正版小说的更新速度。并且该网站只支持在线浏览,不支持小说打包下载。因此,本次实战就是从该网站爬取并保存一本名为《终极斗罗》的小说,该小说是唐家三少正在连载中的一部玄幻小说。

PS:本实例仅为交流学习,支持唐三大大,请上起点中文网订阅。


正文

一、开发环境

运行平台: Windows 10
Python版本: Python3.6
IDE: PyCharm

二、爬取思路

  1. 抓取单章内容
  2. 提取有用信息,并进行清理
  3. 获取每一章名字和对应的URL
  4. 下载每一章小说内容并整合保存成txt文档
爬取单章内容

首先打开Chrome浏览器,打开笔趣阁(https://www.qu.la/) 找到需要爬取的小说《终极斗罗》(https://www.qu.la/book/101104/ ) 然后找到第一章点击打开。
在这里插入图片描述
然后通过requests库将整个HTML代码获取下来:

# -*- coding:UTF-8 -*-
import requests

if __name__ == '__main__':
    target = 'https://www.qu.la/book/101104/5281139.html'
    req = requests.get(url=target)
    req.encoding = req.apparent_encoding  # 因为网站头部没有指定编码,因此需要requests自己去判断
    html = req.text
    print(html)

运行代码,可以看到如下结果:
在这里插入图片描述
可以看到,我们很轻松地获取了HTML信息。但是,很显然,很多信息是我们不想看到的,我们只想获得如右侧所示的正文内容,我们不关心div、br这些html标签。如何把正文内容从这些众多的html标签中提取出来呢?这就是本次实战的主要内容。

提取有用的信息并进行清理

我们利用beautiful soup库进行提取想要的内容

import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    target = 'https://www.qu.la/book/101104/5281139.html'
    req = requests.get(url=target)
    req.encoding = req.apparent_encoding  # 因为网站头部没有指定编码,因此需要requests自己去判断
    html = req.text
    bf = BeautifulSoup(html, "html5lib")
    texts = bf.find_all('div', id='content')
    print(texts)

然后我们可以看到,我们提取了想要的正文部分,但是里面有许多空格和< br/ >标签,我们需要将其清洗出去:

在这里插入图片描述

# -*- coding:UTF-8 -*-
import requests,re
from bs4 import BeautifulSoup

if __name__ == '__main__':
    target = 'https://www.qu.la/book/101104/5281139.html'
    req = requests.get(url=target)
    req.encoding = req.apparent_encoding  # 因为网站头部没有指定编码,因此需要requests自己去判断
    html = req.text
    bf = BeautifulSoup(html, "html5lib")
    texts = bf.find_all('div', id='content')
    print(texts)
    texts = str(texts[0])
    pattern = re.compile('.*?<br/>')  # 选出所有以<br/>为结尾的
    conts = re.findall(pattern, texts)

    conts[0] = conts[0].lstrip()
    conts[0] = '  ' + conts[0]  # 第一行行首会有多余的空格

    for i in range(len(conts)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值