我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python爬虫】数据解析之bs4解析和xpath解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python爬虫】数据解析之bs4解析和xpath解析

🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🦄 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Python爬虫
🌠 首发时间:2022年8月9日
✅ 如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦

阅读指南

1. HTML语法规则

bs4 解析比较简单,但是呢,我们需要了解一些基础的前端知识,然后再使用 bs4 去提取,逻辑就会清晰很多,编写难度也会大大降低

HTMLHyper Text Markup Language)超文本标记语言,是我们编写网页的最基本同时也是最核心的一种语言,其语法规则就是用不同的标签对网页上的内容进行标记,从而使网页显示出不同的展示效果

<h1>数据解析h1>

上述代码的含义是在页面中显示 “数据解析” 4 个字,但是 “数据解析” 这 4 个字被 “” 标记了,这个时候,浏览器在展示的时候就会让里面的内容,也就是 ”数据解析“ 这 4 个字变大加粗,俗称,所以 HTML 的语法就是用类似这样的标签对页面内容进行标记,不同的标签表示出来的效果也是不一样的

h1:一级h2:二级p:段落font:字体body:主体

这里只是给小白们简单科普一下,HTML 的标签远不止这些

好的,标签我们明白了,接下来就是属性了

<h1>数据解析h1><h1 align='right'>数据解析h1>

我们还可以在标签中添加 ” align='right' " 这样的东西,这又是什么呢?

首先,这两个标签都是 h1 标签,都是一级,但是下面这个会显示在右边,也就是说,通过这种形式对 h1 标签添加了说明,这种语法在 HTML 中被称为标签的属性,并且属性可以有很多个

总结:HTML 语法:

<标签 属性="" 属性="">被标记的内容标签>

有了这些知识,我们再去看 bs4 就会得心应手了,因为 bs4 就是通过标签和属性去定位页面上的内容的

2. bs4模块安装

bs4 是一个第三方库,首先我们得进行安装

Python 中推荐使用 pip 进行安装,很简单,在 Pycharm 下方找到 Terminal,输入以下命令:

pip install bs4

如果安装过慢,可以考虑更换为国内源:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

3. 搞搞农产品价格

bs4 在使用的时候需要参照一些 HTML 的基本语法来进行使用,通过案例来学会使用 bs4 更加快捷

我们来尝试抓取北京岳各庄批发市场的农产品价格 ➔ 目标网站

在这里插入图片描述

在这里插入图片描述

代码实现:

import csvimport requestsfrom bs4 import BeautifulSoup# 获取页面源代码url = "http://www.ygzapm.com/web/dailyPrice"resp = requests.get(url)# print(resp.text)  # 测试用f = open("农产品信息.csv", mode="w", encoding='utf-8', newline='')csvWriter = csv.writer(f)# 解析数据# 1. 把页面源代码交给 BeautifulSoup 进行处理,生成 bs 对象page = BeautifulSoup(resp.text, "html.parser")  # 指定html解析器# 2. 从bs对象中查找数据,两个函数# find(标签,  属性=值)       找一个# find_all(标签, 属性=值)        找全部# table = page.find("table", class_="table")    # 加下划线区分关键字,与下面的表达式一样table = page.find("table", attrs={"class": "table"})# print(table)  # 测试用trs = table.find_all("tr")[1:]for tr in trs:  # 遍历表格的每一行    tds = tr.find_all("td")    type = tds[0].text  # 拿到被标签标记的内容    name = tds[1].text    max_price = tds[2].text    min_price = tds[3].text    avg_price = tds[4].text    unit = tds[5].text    market = tds[6].text    date = tds[7].text    # print(type, name, max_price, min_price, avg_price, unit, market, date)  # 测试用    csvWriter.writerow([type, name, max_price, min_price, avg_price, unit, market, date])resp.close()f.close()print("over!!!")

效果:

在这里插入图片描述

你也可以对代码进行改进,抓取多页数据,但个人建议不要将全部数据都抓取下来

4. 抓取彼岸图网壁纸

彼岸图网

在这里插入图片描述

你以为我们要抓取的是这些图片吗?

其实不是,我们要抓取的是点击图片进入的页面的高清图片,也就是如下

在这里插入图片描述

具体步骤一共有三步:

  1. 获取主页面源代码,然后提取子页面的链接地址
  2. 获取子页面源代码,查找图片的下载地址
  3. 下载图片

废话不多说,开搞

import requestsfrom bs4 import BeautifulSoupimport time# 1. 获取主页面源代码,然后提取子页面的链接地址url = "https://pic.netbian.com/"resp = requests.get(url)resp.encoding = 'gbk'main_page = BeautifulSoup(resp.text, "html.parser")alist = main_page.find("div", class_="slist").find_all("a")# print(alist) # 测试用for a in alist:    href = url + a.get('href')     # 通过get得到属性的值,拼接得到完整子页面链接    # print(a)  # 测试用    # 2. 获取子页面源代码,查找图片的下载地址    sub_page_resp = requests.get(href)    sub_page_resp.encoding = 'gbk'    sub_page_text = sub_page_resp.text    # 从子页面中获取图片的下载地址    sub_page = BeautifulSoup(sub_page_text, "html.parser")    div = sub_page.find("div", class_="photo-pic")    img = div.find("img")    img_href = url + img.get("class="lazy" data-src").strip("/")       # 拼接图片的下载地址    # print(img_href)   # 测试用    # 3. 下载图片    img_resp = requests.get(img_href)    img_name = img_href.split("/")[-1]      # 图片名称    img_package = "D:\\pythonProject\\images\\"     # 先自己创建一个文件夹以便存放图片,再运行程序    with open(img_package + img_name, mode='wb') as f:        f.write(img_resp.content)   # 这里拿到的是字节    img_resp.close()    sub_page_resp.close()    print(img_name + " 已下载成功")    time.sleep(1)       # 让服务器休息一下resp.close()print("over!!!")

这里是因为我的编译器设置了背景,图片效果不是特别好,还行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

xpath 是一门在 XML 文档中查找信息的语言,xpath 可用来在 XML 文档中对元素和属性进行遍历,而我们熟知的 HTML 恰巧属于 XML 的一个子集,所以完全可以用 xpath 去查找 html 中的内容

首先,我们先了解几个概念

<book><id>1id> <name>天才基本法name> <price>8.9price> <author> <nick>林朝夕nick> <nick>裴之nick> author>book> 

在上述 html 中,

  1. book, id, name, price…都被称为节点.
  2. Id, name, price, author 被称为 book 的子节点
  3. book 被称为 id, name, price, author 的父节点
  4. id, name, price,author 被称为同胞节点

好的,有了这些基础知识后,我们就可以开始了解 xpath 的基本语法了

Python 中想要使用 xpath,需要安装 lxml 模块

pip install lxml

用法:

  1. 将要解析的 html 内容构造出 etree 对象.
  2. 使用 etree 对象的 xpath() 方法配合 xpath 表达式来完成对数据的提取
from lxml import etreexml = """    1    天才基本法    8.9            林朝夕        裴之                
周杰伦1
周杰伦2
佩奇 乔治
"""
tree = etree.XML(xml)# result = tree.xpath("/book") # / 表示层级关系,第一个 / 是根节点# result = tree.xpath("/book/name/text()") # text() 获取文本# result = tree.xpath("/book/author/nick/text()")# result = tree.xpath("/book/author//nick/text()") # 获取author里面所有nick里面的内容# result = tree.xpath("/book/author/*/nick/text()") # * 任意的节点,通配符result = tree.xpath("/book//nick/text()") # 获取所有nick里面的内容print(result)

准备一个 HTML 文件:

DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8" />    <title>Titletitle>head><body>    <ul>        <li><a href="http://www.baidu.com">百度a>li>         <li><a href="http://www.google.com">⾕歌a>li>         <li><a href="http://www.sogou.com">搜狗a>li>    ul>     <ol>         <li><a href="plane">⻜机a>li>         <li><a href="cannon">⼤炮a>li>         <li><a href="train">⽕⻋a>li>     ol>     <div class="jay">周杰伦div>     <div class="food">麻辣烫div> body> html>

xpath 最方便的地方在于它可以直接复制,都不用你写

浏览器右击选择检查,点左上角小箭头点击你要提取的内容,它会自动匹配对应的 HTML 代码,右击 HTML 代码,选择复制,选择 xpath

在这里插入图片描述

from lxml import etreetree = etree.parse("data.html")# result = tree.xpath('/html/body/ul/li[1]/a/text()')        #xpath的顺序是从1开始数的# result = tree.xpath("/html/body/ol/li/a[@href='cannon']/text()")        # 属性筛选# print(result)# ol_li_list = tree.xpath("/html/body/ol/li")# for li in ol_li_list:#     print(li.xpath("./a/text()"))       # 在li中继续查找,相对查找#     print(li.xpath("./a/@href"))     # 获取属性值## print(tree.xpath("/html/body/ul/li/a/@href"))print(tree.xpath("/html/body/div[1]/text()"))

🧸 这次的分享就到这里啦,继续加油哦^^
🐱 我是程序喵,陪你一点点进步
🍭 有出错的地方欢迎在评论区指出来,共同进步,谢谢啦

来源地址:https://blog.csdn.net/weixin_62511863/article/details/126239626

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Python爬虫】数据解析之bs4解析和xpath解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python爬虫之bs4数据解析

一、实现数据解析 因为正则表达式本身有难度,所以在这里为大家介绍一下 bs4 实现数据解析。除此之外还有 xpath 解析。因为 xpath 不仅可以在 python 中使用,所以 bs4 和 正则解析一样,仅仅是简单地写两个案例(爬取可翻
2022-06-02

Python爬虫必备之XPath解析库

目录一、简介二、安装三、节点3.1 选取节点3.2 选取未知节点3.3 节点关系四、XPath实例一、简介 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C
2022-06-02

python中bs4解析和xpath解析的示例分析

这篇文章给大家分享的是有关python中bs4解析和xpath解析的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。bs4解析原理:1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对
2023-06-29

python爬虫指南之xpath实例解析

Python爬虫指南之XPath实例解析XPath是一种用于在XML文档中进行导航和查找元素的语言。在爬虫中,XPath可以用于解析网页的HTML结构,提取所需的数据。以下是一个使用XPath解析HTML结构的Python爬虫实例:```p
2023-08-15

爬虫之数据解析

一、啥是数据解析  在上一篇关于爬虫的博客里,我提到过,整个爬虫分为四个部分,上一篇博客已经完成了前两步,也就是我说的最难的地方,接下来这一步数据解析不是很难,但就是很烦人,但只要你有耐心,一步一步查找、排除就会提取出目标信息,这一步就相当
2023-01-30

Python爬虫必备之XPath解析库的示例分析

小编给大家分享一下Python爬虫必备之XPath解析库的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、简介XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进
2023-06-15

python怎么爬虫lxml库解析xpath网页

这篇文章主要介绍“python怎么爬虫lxml库解析xpath网页”,在日常操作中,相信很多人在python怎么爬虫lxml库解析xpath网页问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python怎么爬
2023-06-30

Python爬虫之解析HTML页面详解

本文介绍了Python中用于解析HTML页面的重要工具之一——BeautifulSoup库,详细讲解了BeautifulSoup库的基本使用方法、标签选择器、CSS选择器、正则表达式、遍历文档树等内容,并结合实例代码展示了BeautifulSoup库的应用场景
2023-05-18

python爬虫爬取网页数据并解析数据

本篇文章给大家带来了关于Python的相关知识,主要介绍了python爬虫如何爬取网页数据并解析数据,帮助大家更好的利用爬虫分析网页,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】1.网络爬虫的基本概念网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。只要浏览器能够做的事情,原则上,爬虫都能够做到。
2022-08-15

Python的xpath数据解析案例分析

这篇“Python的xpath数据解析案例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python的xpath数据解析
2023-06-29

Python使用lxml解析xpath爬取konachan

要使用lxml解析xpath来爬取konachan,你可以按照以下步骤进行:1. 首先,确保你已经安装了lxml库。你可以使用以下命令在终端或命令提示符中安装lxml:```pip install lxml```2. 导入必要的库:```p
2023-08-22

Python爬虫与数据分析之爬虫技能:u

专栏目录:Python爬虫与数据分析之python教学视频、python源码分享,pythonPython爬虫与数据分析之基础教程:Python的语法、字典、元组、列表Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录