• 用爬虫保存文章到TXT文件丨Python爬虫实战系列(7)


    📃个人主页:互联网阿星🧐
    💬格言:选择有时候会大于努力,但你不努力就没得选
    🔥作者简介:大家好我是互联网阿星,和我一起合理使用Python,努力做时间的主人
    🏆如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

    在这里插入图片描述

    行业资料:PPT模板、简历模板、行业经典书籍PDF
    面试题库:历年经典、热乎的大厂面试真题,持续更新中…
    学习资料:含Python基础、爬虫、数据分析、算法等学习视频和文档
    Tips:以上资料·阿星已备好,取你所需>>戳我,空投直达🪂



    前言

    本节通过具体的爬虫程序,演示 BS4 解析库的实际应用。

    用爬虫保存文章到TXT文件

    爬虫程序目标

    在这里插入图片描述

    案例简单分析

    首先判网站属于静态网站,因此您的主要任务是分析网页元素的组成,然后使用 BS4 提取所需的信息。如下所示:
    在这里插入图片描述

    图1:网页元素分析

    提取到 a 标签是解决本程序的重点,a 标签的页面代码结构如下所示:
    在这里插入图片描述

    从上述代码可以看出,a 标签包含了目录名称以及详情页的地址链接。那么如何获取 a 标签呢?经过简单分析后可知 a 标签属于 div > ul > li 的子节点,因此可以使用 BS4 的 select() 获取。如下所示:

    list_name = soup.select('.book-mulu > ul > li > a')
    
    • 1

    上述代码的返回值是一个列表,列表中每一个元素都是一个 Tag 对象,类型为 <class 'bs4.element.Tag'>

    下载详情页的 URL 也非常容易获得,它是由发起请求的 URL 与 a 标签的 herf 链接拼接而成。因此通过字符串拼接就可以获取下载详内容页的 URL。
    在这里插入图片描述
    最后一步是提取具体的内容。通过分析详情页的元素构成可知,我们想要的内容都包含在以下标签中:

    <div class="chapter_content">
    具体内容
    </div>
    
    • 1
    • 2
    • 3

    因此使用 BS4 的 find() 方法就可以获取所需内容,如下所示:

    artist = soup.find('div', class_='chapter_content')
    
    • 1

    之后把获取的内容写入到 txt 文件中就可以了。下面我使用之前学习过的 urllib 模块与 BS4 模块编写爬虫程序,这样才能做到温故而知新。

    编写爬虫程序

    代码如下所示,程序中已经做了详细的注释:

    • 阿星提醒:不做代码伸手党~仔细看看,主要是学习其中的方法
    import urllib.request
    import random
    from bs4 import BeautifulSoup
    import time
    def request_html(url):
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}
        request = urllib.request.Request(url, headers=headers)
        return request
    
    def parse_html(html, f):
        # 生成soup对象
        soup = BeautifulSoup(html, 'lxml')
        # 查找所有的章节链接和标题内容
        list_name = soup.select('.book-mulu > ul > li > a')
        # 遍历每一个列表中的tag对象,获取链接个目录
        for item in list_name:
            # 获取链接
            #item: <a href="/book/liangjinyanyi/1.html">自序</a>
            #拼接目录链接,此处item类型为<class 'bs4.element.Tag'>,使用下面方法可以值获取href属性值
            href = 'http://sscmj网址' + item['href']
            # 获取标题
            title = item.text
            print('正在下载:-**--%s--**-......' % title)
            # 获取章节内容函数
            text = get_text(href)
            # 写入文件
            f.write(title + '\n' + text)
            print('结束下载:-**--%s--**-' % title)
            time.sleep(random.uniform(0,1))
    
    # 提取章节内容
    def get_text(href):
        #创建请求对象
        request = request_html(href)
        content = urllib.request.urlopen(request).read().decode('utf8')
        soup = BeautifulSoup(content, 'lxml')
        # 查找包含内容的tag--div
        artist = soup.find('div', class_='chapter_content')
        #获取tag标签中的文本内容
        return artist.text
    
    def run():
        # 打开文件
        f = open('两晋演义.txt', 'w', encoding='utf8')
        url = 'http://scmj网址/book/liangjinyanyi.html'
        # 构建请求对象
        request = request_html(url)
        # 发送请求,得到响应,转换为HTML对象
        html = urllib.request.urlopen(request).read().decode('utf8')
        # 解析内容
        parse_html(html,f)
        #关闭文件
        f.close()
    
    if __name__ == '__main__':
        run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    程序运行结果:
    在这里插入图片描述
    由于生成的 .txt 文件中内容过多,这里就不再做展示了。


    小结

    用爬虫保存文章到TXT文件丨Python爬虫实战系列(7) 就到这了,在学爬虫的老铁记得持续关注,阿星祝你早日修炼成为爬虫大佬😎如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

    学习资料:含Python基础、爬虫、数据分析、算法等学习视频和文档
    行业资料:添加即可领取PPT模板、简历模板、行业经典书籍PDF
    面试题库:历年经典,热乎的大厂面试真题,持续更新中…
    资料已备好,戳我文末名片领…√


    🐌以上资料已备好🐱‍💻戳我名片领

    在这里插入图片描述

  • 相关阅读:
    解决 idea 运行问题:Command line is too long
    【OpenNI2】资料整理 -- 不断更新中
    中兴笔试篇
    删除的文件还能找回来吗?
    [033量化交易] python获取每股收益 净利润 总股本
    文本词频统计的应用——以微词云平台为例
    IntelliJ IDEA、.NET 工具变贵,JetBrains 宣布全家桶涨价!
    React中redux的使用之redux的简单理解,以及创建并使用一个精简版的redux
    在linux下(CentOS7中)配置MySQL5.7数据库,且实现远程访问
    CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
  • 原文地址:https://blog.csdn.net/m0_68103523/article/details/124868320