博客
关于我
Beautiful Soup基础入门
阅读量:381 次
发布时间:2019-03-05

本文共 2493 字,大约阅读时间需要 8 分钟。

Beautiful Soup基础入门

简介

Beautiful Soup 是一个功能强大的 Python 库,专门用于从 HTML 或 XML 文件中提取数据。常见的应用场景包括网页爬虫、数据解析等。以下将介绍如何利用 Beautiful Soup 从网页中提取所需数据。

基本步骤概述

  • 获取网页内容:使用 requests 库获取目标网页的 HTML 内容。
  • 解析 HTML:利用 Beautiful Soup 的解析器将 HTML 内容解析成结构化的数据。
  • 遍历文档树:通过查找和筛选标签,提取目标数据。
  • 解析步骤

    1. 准备工作

    首先,导入必要的库和模块:

    import requestsfrom bs4 import BeautifulSoup

    接下来,使用 requests.get() 获取网页内容。请注意,部分网页可能需要设置合适的 User-Agent 和正确的 encoding

    url = "https://labfile.oss.aliyuncs.com/courses/2184/2019%E8%BD%AF%E7%A7%91%E4%B8%96%E7%95%8C%E5%A4%A7%E5%AD%A6%E5%AD%A6%E6%9C%AF%E6%8E%92%E5%90%8D.html"response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4452.106 Safari/537.36'})response.encoding = response.apparent_encoding  # 确定编码格式html = response.text  # 获取网页内容

    2. 解析 HTML

    使用 BeautifulSoup 对 HTML 内容进行解析。常用的解析器包括 html.parserlxmlhtml5lib。以下使用 html.parser

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

    3. 遍历和搜索文档树

    Beautiful Soup 提供了丰富的方法来查找和遍历文档树。例如,find() 方法用于查找第一个匹配的标签,find_all() 方法用于查找所有匹配的标签。

    查找 tbody 标签

    由于需要提取表格中的数据,首先需要找到 tbody 标签:

    tbody = soup.find('tbody')for child in tbody.find_all('tr'):    print(child)

    提取表格数据

    tbody 标签下,通常存在多个 tr 标签,每个 tr 标签下又包含多个 td 标签。我们可以使用 find_all() 方法来获取所有 td 标签,并提取其中的文本内容:

    info = []for tr in tbody.find_all('tr'):    tds = tr.find_all('td')    for td in tds:        info.append(td.string)print(info)

    4. 灵活的搜索方式

    除了 find()find_all(),还可以使用 search() 方法来进行更灵活的搜索。例如,可以指定标签名和属性来筛选特定内容。

    使用 search() 方法

    results = soup.search('td', {'class': 'rank'})for item in results:    print(item)

    开发实例

    爬取课程信息

    以下是一个用于爬取课程信息的示例代码:

    import requestsfrom bs4 import BeautifulSoupurl = "https://www.lanqiao.cn/courses/"response = requests.get(url)response.encoding = response.apparent_encodingdemo = response.textsoup = BeautifulSoup(demo, 'html.parser')divs = soup.find_all('div', 'course-cover relative')info_dict = {}for div in divs:    href = div.find('a', 'link block').get('href')    title = div.find('h3').get('title')    info_dict[title] = hrefprint(info_dict)

    爬取图片信息

    以下是一个用于爬取图片信息的示例代码:

    import requestsfrom bs4 import BeautifulSoupurl = "https://www.example.com/images"response = requests.get(url)response.encoding = response.apparent_encodinghtml = response.textsoup = BeautifulSoup(html, 'html.parser')imgs = soup.find_all('img')for img in imgs:    print(img.get('src'))  # 获取图片路径    print(img.get('alt'))  # 获取图片描述

    总结

    通过以上步骤,可以轻松地使用 Beautiful Soup 从网页中提取所需数据。无论是表格数据还是图片信息,都可以通过灵活的查找和遍历方法实现。记住,熟练掌握这些技巧是网页爬虫开发中的关键所在。

    转载地址:http://nqrwz.baihongyu.com/

    你可能感兴趣的文章
    上周热点回顾(11.4-11.10)
    查看>>
    [网站公告]11月26日00:00-04:00阿里云RDS升级
    查看>>
    [网站公告]又拍云API故障造成图片无法上传(已恢复)
    查看>>
    上周热点回顾(12.16-12.22)
    查看>>
    云计算之路-阿里云上:对“黑色30秒”问题的猜想
    查看>>
    云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
    查看>>
    云计算之路-阿里云上:奇怪的CPU 100%问题
    查看>>
    云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
    查看>>
    上周热点回顾(6.9-6.15)
    查看>>
    上周热点回顾(6.16-6.22)
    查看>>
    上周热点回顾(6.23-6.29)
    查看>>
    上周热点回顾(10.20-10.26)
    查看>>
    上周热点回顾(2.16-2.22)
    查看>>
    上周热点回顾(3.2-3.8)
    查看>>
    [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
    查看>>
    .NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
    查看>>
    上周热点回顾(7.27-8.2)
    查看>>
    上周热点回顾(9.28-10.4)
    查看>>
    上周热点回顾(3.28-4.3)
    查看>>
    上周热点回顾(5.2-5.8)
    查看>>