python---------bs4爬取数据的一种神器

这篇具有很好参考价值的文章主要介绍了python---------bs4爬取数据的一种神器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者前言

 欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda

目录

Beautiful Soup的简介
解析⼯具对⽐
BeautifulSoup的基本使⽤
解析器
搜索⽂档树
CSS常⽤选择器介绍
select和css选择器提取元素
_______________________________________________

前面我已经介绍了正则表达式,下面我们来介绍bs4

Beautiful Soup的简介

Beautiful Soup是python的⼀个库,最主要的功能是从⽹⻚抓取数据,

BeautifulSoup安装 pip install bs4

如图:python---------bs4爬取数据的一种神器

 我们来看看三种数据提取的方法

python---------bs4爬取数据的一种神器

 本人建议还是使用xpath获取数据是比较好的,使用简单,本次介绍只是让各位知道方法有很多种,找到适合自己的就行

下面我提供一个网址里面有Beautiful Soup库的多种使用方向,而我们使用bs4就是要使用其中的搜索⽂档树

解析器

GitHub地址: https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
使用bs4和其他的获取数据的方法不同最主要的是要有 解析器 

如图:

python---------bs4爬取数据的一种神器

 上面只是两个比较常用的,还有一些我没有列举出来,有兴趣的小可爱可以进入到我给的链接进行查看

如图:

python---------bs4爬取数据的一种神器

下面的代码我是使用lxml解析器,
下面我写一段代码简单的介绍 BeautifulSoup的基本使⽤
我以爬取一页小说为例,网址http:// https://book.zongheng.com/chapter/1216709/68382502.html
代码:
 def parse_data(self,html):
        # 创建一个bs4对象
        soup = BeautifulSoup(html,"lxml")
        # 查看soup 对象的内容(格式化输出,会自动补全标签)
        # print(soup.prettify())
        # 获取title标签
        print(soup.title)
        print(type(soup.title))
        print(soup.title.string)
        print(soup.title.name)

结果:

python---------bs4爬取数据的一种神器

这里我们简单的介绍一下

soup = BeautifulSoup(html,"lxml")

soup.title:获取title标签,返回一个bs4类

soup.title.string   获取title标签里面的文本

soup.title.name  获取title标签的名字(标签名字)

注意:这种方法只能获取第一个找到的标签,不能获取到所有的相同的标签

Beautiful Soup定义了很多搜索⽅法,这⾥着重介绍2个: find() 和 find_all() .其

它⽅法的参数和⽤法类似

find()

代码:

    def parse_data(self, html):

        # 创建一个bs4对象
        soup = BeautifulSoup(html,"lxml")
        print(soup.find("p"))
        print(type(soup.find("p")))
        print(soup.find("span",{"class":"con_txt"}))

结果:python---------bs4爬取数据的一种神器

find(): 获取第一个找到的标签,返回一个bs4对象 ,比较局限

soup.find("span",{"class":"con_txt"})获取到class="con_txt"的span标签

find_all()

代码:

 def parse_data(self, html):

        # 创建一个bs4对象
        soup = BeautifulSoup(html,"lxml")

        print(soup.find_all("p"))
        # 获取所有p标签
        print(type(soup.find_all("p")))
        # 获取所有p标签的前几个
        print(soup.find_all("p",limit=2))

        # 每个p标签的文本
        for p in soup.find_all("p"):
            print(p.string)

        # .获取所有class等于con_txt的span标签
        print(soup.find_all("span",{"class":"con_txt"}))
        print(soup.find_all("span",class_="con_txt"))

        # 将所有div的id="OrderConfirmDialog_close"和class="ui_widget_close"提取出来
        print(soup.find_all("div",{"id":"OrderConfirmDialog_close","class":"ui_widget_close"}))

结果(一部分) 

python---------bs4爬取数据的一种神器

find_all() 返回一个列表,列表元素是bs4对象,
soup.find_all("p",limit=2) 获取所有p标签中的前两个

获取属性值的方法

代码:

 def parse_data(self, html):
        # 创建一个bs4对象
        soup = BeautifulSoup(html, "lxml")
        
        print(soup.find_all("div", {"id": "OrderConfirmDialog_close"})[0].get("class"))
        print(soup.find_all("div", {"id": "OrderConfirmDialog_close"})[0].attrs.get("class"))
        print(soup.find_all("div", {"id": "OrderConfirmDialog_close"})[0]["class"])
结果:
python---------bs4爬取数据的一种神器

 .get() 和.attrs.get()的区别就是attrs.get()能防止报错

上面第三种方法和字典类似,

获取文本的方法

代码:

  def parse_data(self, html):
        # 创建一个bs4对象
        soup = BeautifulSoup(html, "lxml")

        # print(soup.find_all("div",{'class':"content"}))
        for i in soup.find_all("div",{'class':"content"}):
            print(i.string)
            print(i.strings)
            print(i.get_text())
            print(i.stripped_strings)

结果

python---------bs4爬取数据的一种神器

可以看出
string获取文本
strings获取所有文本,返回一个对象,我们还需要转换成list
.get_text()获取所有文本,返回字符串
stripped_strings 获取所有文本并去掉空格,返回一个对象,我们还需要转换成list,和strings的区别就是去空格

 

CSS常⽤选择器介绍

代码(html):

<style type="text/css">
 # 选择p标签
 p{
 background-color:red;
 }
 # 根据class选择p标签
 .line1{
 background-color:pink;
 }
 #line3{
 background-color:blue;
 }
 # div下⾯的p标签
 .box p{
 background-color:pink;
 }
 # 选择div class下⾯直接的p标签
 .box > p {
 background-color:pink;
 }
 # 选择name=username的input标签
 input[name="username"]{
 background-color:pink;
 }
 </style>

上面是html代码的类型定义   .代表class    # 代码id

select和css选择器提取元素

代码

    def parse_data(self, html):
        # 创建一个bs4对象
        soup = BeautifulSoup(html, "lxml")
        soup.select("p")
        # 通过标签名获取
        print(soup.select("p"))

        # 通过类名的来获取标签
        print(soup.select(".con_txt"))

        # 通过id名来获取标签
        print(soup.select("#OrderConfirmDialog_close"))

        # 组合查找
        print(soup.select("div#OrderConfirmDialog_close"))
        print(soup.select("p .con_txt"))
        print(soup.select("p span.con_txt"))

利用select来查找数据要懂属于它的语法

我来讲讲组合查找,

"div#OrderConfirmDialog_close":找到id=OrderConfirmDialog_close的div的标签

"p .con_txt" :找到 class=con_txt的 p标签及p标签里面的其他标签

"p span.con_txt" 找到p标签下class=con_txt的span标签

select()返回的都是列表

全部代码:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ChromeOptions


class Zongheng(object):
    def __init__ (self):
        pass

    def parse_url(self,url):

        option = ChromeOptions()
        option.add_experimental_option('excludeSwitches', ['enable-automation'])
        # 创建一个浏览器
        self.driver = webdriver.Chrome(executable_path='E:/python1/chromedriver', options=option)
        # 如何实现让selenium规避被检测的⻛险
        self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
                 Object.defineProperty(navigator, 'webdriver', {
                 get: () => undefined
                 })
                 """
        })
        # js 过检
        self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
        # 打开网址
        self.driver.get(url)

    # def parse_data(self,html):
    #     # 创建一个bs4对象
    #     soup = BeautifulSoup(html,"lxml")
    #     # 查看soup 对象的内容(格式化输出,会自动补全标签)
    #     # print(soup.prettify())
    #     soup.find()
    #     # 获取title标签
    #     print(soup.title)
    #     print(type(soup.title))
    #     print(soup.title.string)
    #     print(soup.title.name)


    # def parse_data(self, html):
    #
    #     # 创建一个bs4对象
    #     soup = BeautifulSoup(html,"lxml")
    #     print(soup.find("span",{"class":"con_txt"}))
    #     print(type(soup.find("span",{"class":"con_txt"})))


    # def parse_data (self, html):
    #
    #     # 创建一个bs4对象
    #     soup = BeautifulSoup(html, "lxml")
    #
    #     print(soup.find_all("p"))
    #     # 获取所有p标签
    #     print(type(soup.find_all("p")))
    #     # 获取所有p标签的前几个
    #     print(soup.find_all("p", limit=2))
    #
    #     # 每个p标签的文本
    #     for p in soup.find_all("p"):
    #         print(p.string)
    #
    #     # .获取所有class等于con_txt的span标签
    #     print(soup.find_all("span", {"class": "con_txt"}))
    #     print(soup.find_all("span", class_="con_txt"))
    #
    #     # 将所有div的id="OrderConfirmDialog_close"和class="ui_widget_close"提取出来
    #     print(soup.find_all("div", {"id": "OrderConfirmDialog_close", "class": "ui_widget_close"}))


    # def parse_data(self, html):
    #     # 创建一个bs4对象
    #     soup = BeautifulSoup(html, "lxml")
    #
    #     print(soup.find_all("div", {"id": "OrderConfirmDialog_close"})[0].get("class"))
    #     print(soup.find_all("div", {"id": "OrderConfirmDialog_close"})[0].attrs.get("class"))
    #     print(soup.find_all("div", {"id": "OrderConfirmDialog_close"})[0]["class"])


    # def parse_data(self, html):
    #     # 创建一个bs4对象
    #     soup = BeautifulSoup(html, "lxml")
    #
    #     # print(soup.find_all("div",{'class':"content"}))
    #     for i in soup.find_all("div",{'class':"content"}):
    #         print(i.string)
    #         print(list(i.strings))
    #         print(i.get_text())
    #         print(i.stripped_strings)


    def parse_data(self, html):
        # 创建一个bs4对象
        soup = BeautifulSoup(html, "lxml")
        soup.select("p")
        # 通过标签名获取
        print(soup.select("p"))

        # 通过类名的来获取标签
        print(soup.select(".con_txt"))

        # 通过id名来获取标签
        print(soup.select("#OrderConfirmDialog_close"))

        # 组合查找
        print(soup.select("div#OrderConfirmDialog_close"))
        print(soup.select("p .con_txt"))
        print(soup.select("p span.con_txt"))











    def main (self):
        """主要的业务逻辑"""
        # url
        url = "https://book.zongheng.com/chapter/1216709/68382502.html"
        header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"

        }

        # 发送请求获取响应
        self.parse_url(url)
        # print(self.driver.page_source)
        html=self.driver.page_source


        # 数据的提取
        self.parse_data(html)

        # 保存


if __name__ == '__main__':
    zongheng = Zongheng()
    zongheng.main()

这里我就不讲保存了,后面xpath会讲

总结

以上就是我所讲的内容,如果想要bs4爬取网址的代码可以进入我的giteehttps://gitee.com/qin-laoda文章来源地址https://www.toymoban.com/news/detail-489280.html

到了这里,关于python---------bs4爬取数据的一种神器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python-网络爬虫.BS4

    BS4 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库, 它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方 式。 Beautiful Soup 4 官方文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 帮助手册: https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ 一、安装Beaut

    2024年02月14日
    浏览(23)
  • 【问题解决】python安装bs4后,仍然报错 ModuleNotFoundError: No module named ‘bs4‘

    我这里是windows上使用出现的问题: 使用 python3.7 : pip install bs4 后 Python37Libsite-packages 文件夹下只有 bs4-0.0.1-py3.7.egg-info ,没有 bs4 文件夹(安装过程中会有,但是安装完成后被删除了)。 会同时安装 BeautifulSoup4 ,相当于执行 pip install BeautifulSoup4 ,生成了 beautifulsoup4-4.12.0

    2024年02月03日
    浏览(31)
  • python爬虫8:bs4库

    前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好影响。 目录结构 1. 概述与安装 ​ bs4是BeautifulSoup4的简

    2024年02月12日
    浏览(23)
  • Python爬虫学习笔记(六)————BeautifulSoup(bs4)解析

    目录 1.bs4基本简介 (1)BeautifulSoup简称 (2)什么是BeatifulSoup? (3)优缺点 2.bs4安装以及创建 (1)安装          (2)导入          (3)创建对象 3.节点定位 (1)根据标签名查找节点 (2)函数         ①find(返回一个对象)         ②find_all(返回一个列表

    2024年02月17日
    浏览(37)
  • Python爬虫技术系列-02HTML解析-BS4

    参考连接: https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/# http://c.biancheng.net/python_spider/bs4.html 2.1.1 Beautiful Soup安装 Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据。Beautiful Soup 语法简单,使用方便,并且容易理解,

    2024年02月05日
    浏览(28)
  • Python爬虫|基础知识点详细汇总(requests、urllib、re、bs4、xpath、PyQuery、jsonpath、多线程、协程、数据保存、selenium)

    1. 请求数据 ① requests (1) 基本使用 参数 对响应内容的操作 (2) Requests进阶:使用Session 为什么要用 Session? Session代表服务器与浏览器的一次会话过程,Session对象存储了特定用户会话所需的信息 例如:一定时间内记录账号密码 (自动登录) 可以加快 requests请求速度 需要客户端登录的

    2023年04月08日
    浏览(37)
  • 【Python爬虫】Python爬虫三大基础模块(urllib & BS4 & Selenium)

    参考资料 Python爬虫教程(从入门到精通) Python urllib | 菜鸟教程 Beautiful Soup 4 入门手册_w3cschool Selenium入门指南 Selenium教程 什么是 Scrapy|极客教程 Scrapy入门教程 1、网络爬虫是什么? 我们所熟悉的一系列 搜索引擎都是大型的网络爬虫 ,比如百度、搜狗、360浏览器、谷歌搜索等

    2024年02月12日
    浏览(32)
  • Python爬虫之Requests库、BS4解析库的下载和安装

    一、Requests库下载地址 requests · PyPI 将下载的.whl文件放在Script目录下  win+r 输入cmd 进入windows控制台 进入到Scripts目录 输入pip3.10 install requests-2.28.1-py3-none-any.whl(文件的名称) 出现Successful install即安装成功  二、BS4解析库的下载和安装 进入到scripts目录 pip install bs4 由于 BS4

    2024年02月05日
    浏览(30)
  • 基于selenium和bs4的通用数据采集技术(附代码)

    本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概述 Visual Studio Code及Remote

    2024年04月14日
    浏览(27)
  • Python中bs4的soup.find()和soup.find_all()用法

    我们在使用python对网页爬虫的时候,经常会得到一些html数据,因此我们就会利用soup.find()和soup.find_all()方法来筛选出想要的数据。  1.1利用name来查找 代码如下:  结果如下: h1 class=\\\"item\\\" id=\\\"x1\\\"蔡x坤/h1 1.2利用属性attrs来寻找 代码如下: 结果如下:  div class=\\\"item\\\" id=\\\"x3\\\" span你干

    2024年03月20日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包