【Python爬虫】数据解析之bs4解析和xpath解析_bs4 xpath(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

阅读指南

bs4解析

1. HTML语法规则

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

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

<h1>数据解析</h1>

上述代码的含义是在页面中显示 “数据解析” 4 个字,但是 “数据解析” 这 4 个字被 “<h1>” 和 “</h1>” 标记了,这个时候,浏览器在展示的时候就会让里面的内容,也就是 ”数据解析“ 这 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 csv
import requests
from 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 requests
from bs4 import BeautifulSoup
import 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("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解析

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

9e94770f23a55e723a.png)

xpath解析

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-MgFJtSM5-1713349748156)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值