【python】利用BeautifulSoup提取html中的标签、数据

        对于不熟悉HTML和正则表达式的人,可以用第三方模块包BeautifulSoup来提取HTML或XML中的数据。

实例化BeautifulSoup对象:

使用解析器分析指定的网页源代码,得到源代码的结构模型

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup)

定位标签

通过标签名进行定位

源代码中可能会有多个同名标签,通过标签名定位只能返回第一个标签:

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup.p)
#通过标签名定位第一个<p>标签

通过标签属性定位 

标签的属性有class、id,平时使用主要使用class属性(因为class是python的关键词,所以使用时需要加下划线)

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup.find(class_='s-center-box'))
#通过标签名定位第一个属性为"s-center-box"的标签
print(soup.find_all(class_='s-center-box'))
#通过标签名定位所有属性为"s-center-box"的标签,并以数组的形式返回

此外,还可以通过标签名+属性的方式定位

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup.find('div',class_='s-center-box'))
#通过标签名定位第一个属性为"s-center-box"的div标签
print(soup.find_all('div',class_='s-center-box'))
#通过标签名定位所有属性为"s-center-box"的div标签,并以数组的形式返回

通过选择器进行定位

使用select()函数可以返回所有符合条件的标签,常用的有id选择器、class选择器、标签选择器、层级选择器

id选择器、class选择器、标签选择器的用法:

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup.select('#s_wrap'))         #id选择器,要加#符号,然后加id
print(soup.select('.bdpfmenu'))       #class选择器,要加.符号,然后加class属性
print(soup.select('li'))              #标签选择器,直接写标签的类型

层级选择器可以先定位外层标签,再定位内存标签,一层层向内定位就可以找到需要的标签

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup.select('div>li'))                #div标签下的li标签,其中div和li之间没有其他层级
print(soup.select('div>li>#s_wrap'))        #div标签下li标签中id为s_wrap的标签
print(soup.select('div li'))                #div标签下的li标签,其中div和li可以有任意层级

上述为距离,baidu页面中没有实际的标签

从标签中提取文本和属性

string属性可以返回标签下的“直系”文本,该标签下其他标签的文本不提取

而text属性时指定标签下的所有文本

字典取值的方式可以取出属性值

from bs4 import BeautifulSoup
import requests as re

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
rsp=re.get(url='https://ww.baidu.com',headers=headers)
#打开百度网页
soup=BeautifulSoup(rsp.text,'lxml')
#获取源代码,并实例化BeautifulSoup对象

print(soup.select('.title-content-title')[0].string)            #class属性为title-content-title的标签直系文本
print(soup.select('.title-content-title')[0].text)              #class属性为title-content-title的标签下所有文本
print(soup.find(class_='s-center-box')['class'])                #指定标签的属性

 

  • 15
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用BeautifulSoup解析HTML可以使用PythonBeautifulSoup库来实现。首先,你需要安装BeautifulSoup库,可以通过pip命令进行安装。安装完成后,你可以使用下面的步骤来解析HTML: 1. 导入BeautifulSoup库:首先,在Python代码导入BeautifulSoup库,可以使用以下代码: ``` from bs4 import BeautifulSoup ``` 2. 读取HTML文件或字符串:接下来,你需要读取HTML文件或HTML字符串。如果你有一个HTML文件,可以使用open函数打开文件,并将文件内容作为参数传递给BeautifulSoup对象。如果你有一个HTML字符串,直接将字符串作为参数传递给BeautifulSoup对象。例如: ``` with open('index.html', 'r') as file: html = file.read() soup = BeautifulSoup(html, 'html.parser') ``` 3. 解析HTML:一旦你有了BeautifulSoup对象,你可以使用它的各种方法和属性来解析HTML。以下是一些常用的解析方法: - find():用于查找符合条件的第一个标签或元素。 - find_all():用于查找符合条件的所有标签或元素。 - select():通过CSS选择器来查找标签或元素。 - get_text():获取标签或元素内的文本内容。 4. 提取数据:根据你的需求,你可以使用以上解析方法来提取HTML数据,例如提取特定标签内容或属性。 综上所述,利用BeautifulSoup解析HTML的方法是首先导入BeautifulSoup库,然后读取HTML文件或字符串,并使用BeautifulSoup对象的方法和属性来解析HTML,最后根据需求提取数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值