BeautifulSoup库的简单入门

BeautifulSoup库的简单入门

  1. 简介

    在解析爬虫爬取到的HTML页面时,一般采取的方法有两种,一种是通过xpath的方式来获取要定位的元素对象,优点是速度快,直接。但是xpath的定位方式的语法需要有学习成本。 另外一种就是beautifulSoup库。 一般在解析页面的时候可能需要两种方式搭配使用。本文将介绍beautifulSoup库的简单使用方法。

  2. 安装

    通过pip 安装 pip install beautifulsoup4

  3. 使用

    • 引入:

      from bs4 import BeautifulSoup
      

    一般要分析的网络资源有两种,一种是下载好的html文本文件,另外一种是直接从网络上获取的数据流(这里的描述可能不太准确)。

    对于第一种的待解析文本,我们使用

    soup = BeautifulSoup(open('test.html'), 'html.parser')
    

    对于直接解析网络数据流的方式,我们采用代码

    session = cloudscraper.create_scraper() # 为了绕开cloudflare 5秒 反爬的限制,用cloudscraper 代替 requests 库
    response = session.get(url=url)
    soup = BeautifulSoup(response.text, 'html.parser')
    

    这样我们就得到了一个soup对象。

    • soup 对象的常用方法介绍

      • soup.prettify() 格式化输出网页文本内容

      • find_all(name, attrs) 查找页面中所有的指定元素

        name 参数: 标签名, 如 div, a, span

        attrs 参数: 属性, 是个字典类型

        • 获取页面元素的标签

          如我们要获取页面中的a标签,就可以采用soup.find_all(name="a")的方式获取页面中的所有a标签,当然,一般页面中会存在多个a标签,所以这个函数的返回值会是一个列表,可以通过循环的方式拿到自己需要的那个a标签。

        • 获取指定标签的属性

          如果我们需要获取idnr_titlea标签,那么就可以使用find_all(name="a", attrs={'id':'nr_title'}), 当然,如果还有其他的限制条件,都可以添加到attrs参数中去。

        同样的还有一个find()方法,使用方法和find_all() 类似,一般用于对单个标签元素的查找。

    • 标签对象介绍

      每一个标签对象都有一个attrs 属性,以键值对的方式返回该标签所具有的所有属性,如:id, name, class herf 等, 比如想要获取a标签的href 属性(爬虫中最常用的操作方法),就可以使用:href = a['href']

以上基本上搭配xpath , 页面上的所有元素就都可以获取的到。剩下的逻辑就是如果爬取和下载了。

最后附上爬取某小说网站小说的源代码:

# !/usr/bin/python
# -*- coding:UTF-8 -*-
"""
* 本程序的主要功能如下:
* 1. 爬取 余华 《许三观卖血记》
* 2.
* @author: Kenny Li
* @file:   spider2.py
* @time:   2021-7-19 15:02
* e-Mail:  yifei1193@163.com
"""

import os
import cloudscraper
from bs4 import BeautifulSoup

from utils.settings import ROOT_DIR

# 为了绕开cloudflare 5秒 反爬的限制,用cloudscraper 代替 requests 库
session = cloudscraper.create_scraper()

def get_chapter(url):
    # 获取目录部分所有章节的URL
    response = session.get(url=url)
    soup = BeautifulSoup(response.text, 'html.parser')
    tags_a = soup.find_all(name='ul')[1].find_all(name='a')
    all_charpter_list = []
    for a in tags_a:
        all_charpter_list.append(a['href'])

    return all_charpter_list


def spider(url, fp):
    # 开始逐个页面爬取并写入到文本文件中
    response = session.get(url=url)
    soup = BeautifulSoup(response.text, 'html.parser')
    title = soup.find_all(name='h1', attrs={'id': 'nr_title'})[0].text
    print('{}的url是:\n{}'.format(title,url))
    div = soup.find(name='div', attrs={'id': 'nr1'})

    content = div.find_all(name='p')
    title = "\u3000\u3000\u3000\u3000\u3000\u3000\u3000★★★★★ {} ★★★★★".format(title)
    fp.write(title)
    fp.write('\r\n\r\n')
    for p in content:
        fp.write('\u3000\u3000{}'.format(p.text))
        fp.write('\r\n')
    fp.write('\r\n')
    print('{}爬取完成!'.format(title))



if __name__ == '__main__':
    url = 'https://www.xxx.com/xusanguanmaixueji/'
    book_name = "许三观卖血记"
    book_path = os.path.join(ROOT_DIR,'output/{}.txt'.format(book_name))
    with open((book_path), "a", encoding='utf8') as fp:
    # with open(os.path.join(ROOT_DIR, 'output/许三观卖血记.txt'), "a", encoding='utf8') as fp:
        href = get_chapter(url)
        for h in href:
            # print(h)
            spider(h, fp)

    print("全书爬取完成!书籍存储目录为:{}".format(book_path))
    fp.close()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
非常好,我可以帮助您了解和使用 Beautiful Soup 网页爬虫。Beautiful Soup 是一个流行的 Python ,用于从 HTML 或 XML 文件中提取数据。它提供了一种简单而灵活的方式来遍历、搜索和修改解析树。 要使用 Beautiful Soup,您需要先安装它。可以使用 pip 工具在命令行中执行以下命令进行安装: ```python pip install beautifulsoup4 ``` 安装完成后,您可以在 Python 脚本中导入 Beautiful Soup 并开始使用它。下面是一个简单示例,展示了如何使用 Beautiful Soup 解析 HTML 文件并提取其中的数据: ```python from bs4 import BeautifulSoup # 从文件中读取 HTML with open("example.html") as file: html = file.read() # 创建 Beautiful Soup 对象 soup = BeautifulSoup(html, "html.parser") # 使用 CSS 选择器查找元素 title = soup.select_one("h1").text links = soup.select("a") # 打印结果 print(title) for link in links: print(link["href"], link.text) ``` 在这个示例中,我们首先打开一个 HTML 文件并将其读取到变量 `html` 中。然后,我们使用 `BeautifulSoup` 类创建一个 Beautiful Soup 对象 `soup`,并指定使用 `html.parser` 解析器来解析 HTML。 接下来,我们可以使用 CSS 选择器来查找 HTML 中的元素。在示例中,我们通过 `soup.select_one("h1")` 查找第一个 `h1` 标签,并使用 `.text` 属性取得标签的文本内容。我们还通过 `soup.select("a")` 查找所有的 `a` 标签,并将它们存储在一个列表中。 最后,我们打印出标题和链接的结果。 这只是 Beautiful Soup 的入门示例,它还提供了更多功能,如遍历树、搜索元素、修改文档等。您可以查阅 Beautiful Soup 的官方文档以了解更多详细信息和用法示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值