python-网络爬虫.BS4

这篇具有很好参考价值的文章主要介绍了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/

一、安装Beautiful Soup

命令行:pip3 install beautifulsoup4

或者:

File--》setting--》Project:xxx--》右侧 “+” ==》查找 Bs4 ==》左下角

install ==>apply ==>确定

二、安装解析器lxml (第三方的解析器,推荐用lxml,速度快,文档容错能 力强)

        pip3 install lxml

三、使用

        创建bs对象

# 打开本地HTML文件的方式来创建对象

        soup = BeautifulSoup(open('xxxx.html')) # 创建Beautiful Sou对象

#打开网上在线HTML文件

        url = 'https://jobs.51job.com/ruanjian/'

        wb_data = requests.get(url)

        soup = BeautifulSoup(wb_data.text, 'lxml')

        其中

                soup = BeautifulSoup(html, "lxml")         # 指定lxml解析器

        或者

        soup = BeautifulSoup(url, 'html.parser')         # 内置默认html解析器

         格式化输出soup对象内容

        print(soup.prettify())

        

        四大对象:

        Beautiful Soup将复杂HTML文档转换成一个不复杂的树形结构,

        每个节点都是Python对象,所有对象可以归纳为4种:

        Tag                                         标签                                 bs4.element.Tag

        NavigableString                    字符串                                bs4.element.NavigableString         BeautifulSoup                      整体页面                             bs4.BeautifulSoup

        Comment                                注释                                 bs4.element.Comment

python-网络爬虫.BS4,python,爬虫,开发语言

python-网络爬虫.BS4,python,爬虫,开发语言 

 Tag:是HTML 中的一个个标签

python-网络爬虫.BS4,python,爬虫,开发语言

上面的 title a 等等 HTML 标签加上里面包括的内容就是 Tag。

一般标签都是成对出现,结尾的有 /标示

下面用 Beautiful Soup 来方便地获取 Tags print soup.title

python-网络爬虫.BS4,python,爬虫,开发语言

 对于 Tag,它有两个重要的属性,是 name 和 attrs

print soup.name

print soup.head.name

#[document]

#head

soup 对象本身比较特殊,它的 name 即为 [document],

对于其他内部标签,输出的值便为标签本身的名称。

print soup.p.attrs

#{'class': ['title'], 'name': 'dromouse'}

如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什 么

print soup.p['class']

#['title']

还可以这样,利用get方法,传入属性的名称,二者是等价的

print soup.p.get('class')

#['title']

NavigableString: ##可以遍历的字符串

既然我们已经得到了标签的内容,那么问题来了,

我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可,

例如:

print soup.p.string

#The Dormouse's story

检查一下它的类型

print type(soup.p.string)

python-网络爬虫.BS4,python,爬虫,开发语言  

BeautifulSoup                 ##表示的是一个文档的全部内容.大部分时候,

                                        可以把它当作 Tag 对象,是一个特殊的 Tag

获取它的类型,名称,以及属性

print type(soup.name)

python-网络爬虫.BS4,python,爬虫,开发语言

 文章来源地址https://www.toymoban.com/news/detail-621869.html

print soup.name

#[document]

print soup.attrs

#{} 空字典

Comment         ##特殊类型的 NavigableString 对象,输出的内容仍然不包 括注释符号

print soup.a

print soup.a.string

print type(soup.a.string)

运行结果如下

python-网络爬虫.BS4,python,爬虫,开发语言

python-网络爬虫.BS4,python,爬虫,开发语言

 

其他操作: 遍历文档树 以head标签为例

python-网络爬虫.BS4,python,爬虫,开发语言

# .content 属性可以将tag的子节点以列表的方式输出

print(soup.head.contents)

python-网络爬虫.BS4,python,爬虫,开发语言 

print(soup.head.contents[1])         # 获取列表中某一元素,0 是页面上的换行符 号,1才是真值

# .children 返回的是一个list生成器对象

print(soup.head.children)

python-网络爬虫.BS4,python,爬虫,开发语言

 # .string 返回最里面的内容

 print(soup.head.string)

print(soup.title.string)         # 两个输出是一样的

搜索文档树 ==》find_all() select()

find_all(name, attrs, recursive, text, **kwargs)

# find用法相同,只返回一个

# name参数可以查找所有名字为 name 的tag,可以是字符串,正则表达 式,列表

print(soup.find_all('a'))

print(soup.find_all(["a" , "b"]))

#recursive 递归查找相同名称标签

# keyword参数直接匹配属性对应的值

print(soup.find_all(class_= "sister"))

        # 因为class在python中已经有了,为了防止冲突,所以是class_

print(soup.find_all(id= 'link2'))

# text参数搜索文档中的字符串内容,与name参数的可选值一样,text参数 接受字符串,正则表达式,列表

print(soup.find_all(text= "Elsie")) #严格匹配

print(soup.find_all(text=["Tillie" , "Elsie" , "Lacie"])) #找多个

print(soup.find_all(text=re.compile("Dormouse"))) #正则查找

五:使用演练

python-网络爬虫.BS4,python,爬虫,开发语言

以实际例子作说明:

1、定义一个html,并使用BeautifulSoup的lxml解析

python-网络爬虫.BS4,python,爬虫,开发语言

python-网络爬虫.BS4,python,爬虫,开发语言 

 

2、获取所有的tr标签

find 返回找到的第一个标签,find_all以list的形式返回找到的所有标签

trs = soup.find_all('tr')         # 返回列表

n=1

for i in trs:

        print('第{}个tr标签: '.format(n))

        print(i)

         n+=1

3、获取第二个tr标签

limit 可指定返回的标签数量

trs = soup.find_all('tr' ,limit=2)[1]         # 从列表中获取第二个元素,limit 获取 标签个数

print(trs)

4、获取class= 'a1'的tr标签

a.方法一: class_

trs = soup.find_all('tr' ,class_= 'a1')

n=1

for i in trs:

        print('第{}个class=''a1''的tr标签:'.format(n))

        print(i)

        n+=1

b.方法二:attrs 将标签属性放到一个字典中

trs = soup.find_all('tr',attrs={'class':'a1'})

n=1

for i in trs:

        print('第{}个class=''a1''的tr标签:'.format(n))

         print(i)

        n+=1

5、提取所有id= 'test'且class= 'test'的a标签

方法一:class_

alist = soup.find_all('a' ,id= 'test' ,class_= 'test')

n=1

for i in alist:

        print('第{}个id= ''test''且class= ''test''的a标签: '.format(n))

        print(i)

        n+=1

 方法二:attrs

alist = soup.find_all('a' ,attrs={'id':'test' , 'class':'test'})

n=1

for i in alist:

         print('第{}个id= ''test''且class= ''test''的a标签: '.format(n))

        print(i)

        n+=1

6、获取所有a标签的href属性

alist = soup.find_all('a')

#方法一:通过下标获取

for a in alist:

        href = a['href']

         print(href)

#方法二: 通过attrs获取

for a in alist:

        href = a.attrs['href']

        print(href)

7、获取所有的职位信息(所有文本信息)

string 获取标签下的非标签字符串(值), 返回字符串

注:第一个tr为标题信息,不获取。从第二个tr开始获取。

trs = soup.find_all('tr')[1:]

movies = []

for tr in trs:

        move = {}

        tds = tr.find_all('td')

        move['td1'] = tds[0].string         # string 取td的值

        move['td2'] = tds[1].string

        move['td3'] = tds[2].string

        movies.append(move)

print(movies)

8、获取所有非标记性字符

strings 获取标签下的所有非标签字符串, 返回生成器。

trs = soup.find_all('tr')[1:]

for tr in trs:

         infos = list(tr.strings)         # 获取所有非标记性字符,包含换行、空格

        print(infos

9、获取所有非空字符

stripped_strings 获取标签下的所有非标签字符串,并剔除空白字符,返回 生成器。

trs = soup.find_all('tr')[1:]

for tr in trs:

        infos = list(tr.stripped_strings)         # 获取所有非空字符,不包含换行、空 格

        print(infos)

# stripped_strings 获取所有职位信息

trs = soup.find_all('tr')[1:]

movies = []

for tr in trs:

        move = {}

        infos = list(tr.stripped_strings)

        move['职位'] = infos[0]

        move['类别'] = infos[1]

         move['时间'] = infos[2]

        movies.append(move)

print(movies)

10、get_text 获取所有职位信息

get_text 获取标签下的所有非标签字符串,返回字符串格式

trs = soup.find_all('tr')[1]

text = trs.get_text() # 返回字符串格式

print(text)

python-网络爬虫.BS4,python,爬虫,开发语言

 

14、提取所有a标签的href属性

# 方法一:

a = soup.select('a')

for i in a:

        print(i['href'])

# 方法二:

a = soup.select('a')

for i in a:

         print(i.attrs['href'])

python-网络爬虫.BS4,python,爬虫,开发语言

 python-网络爬虫.BS4,python,爬虫,开发语言

 python-网络爬虫.BS4,python,爬虫,开发语言

python-网络爬虫.BS4,python,爬虫,开发语言 

 

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

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

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

相关文章

  • python爬虫数据解析xpath、jsonpath,bs4

    解析数据的方式大概有三种 xpath JsonPath BeautifulSoup 打开谷歌浏览器扩展程序,打开开发者模式,拖入插件,重启浏览器,ctrl+shift+x,打开插件页面 安装在python环境中的Scripts下边,这里就是python库的位置,例如我的地址为:E:pythonpython3.10.11Scripts 解析本地文件etree.parse( \\\'xx.

    2024年02月13日
    浏览(46)
  • 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日
    浏览(42)
  • 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日
    浏览(43)
  • 【用Vscode实现简单的python爬虫】从安装到配置环境变量到简单爬虫以及python中pip和request,bs4安装

    第一步:安装python包  可以默认,也可以选择自己想要安装的路径 python下载资源链接: Download Python | Python.org 第二步: 配置python环境变量,找到我的电脑-属性-高级-环境变量 找到python,新增 然后将刚刚安装的路径配置到path路径下: 特别注意,配置了环境变量后要进行重启电

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

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

    2023年04月08日
    浏览(56)
  • python的bs4模块

    Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据。Beautiful Soup 语法简单,使用方便,并且容易理解,因此您可以快速地学习并掌握它。 而 html.parser 表示解析文档时所用的解析器,此处的解析器也可以是 ‘l

    2024年02月07日
    浏览(40)
  • 【问题解决】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日
    浏览(42)
  • python---------bs4爬取数据的一种神器

     欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda Beautiful Soup的简介 解析⼯具对⽐ BeautifulSoup的基本使⽤ 解析器 搜索⽂档树 CSS常⽤选择器介绍 select和css选择器提取元素 _______________________________________________ 前面我已经介绍了正则表达式,下面我们来介绍bs4 Beautiful Soup是py

    2024年02月09日
    浏览(46)
  • 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日
    浏览(42)
  • 解析库bs4的使用

    安装: pip3 install Beautifulsoup4 1.bs4遍历文档树 bs4:解析xml格式的模块,从xml中找想要的数据。 html是xml的一种,解析html,使用requests返回的数据,可能是json、html、文件,再使用bs4解析html格式。 用法: 注:lxml比html.parser速度块,但是需要安装lxml模块( pip3 install lxml ) 2.bs4搜

    2024年02月12日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包