首页 > 解决方案 > 无法找出此 HTML 的 Beautifulsoup find() 命令

问题描述

我正在尝试使用 python 和 Beautiful soup 从页面中抓取一些信息,但我似乎无法写出我需要的正确路径,html 是:

<div class="operator active" data-operator_name="Etisalat" data- 
operator_id="5"><div class="operator_name_etisalat"></div></div>

我正在尝试获取该运营商名称“Etisalat”,我已经做到了这一点:

def list_contries():

select = Select(driver.find_element_by_id('international_country'))
select.select_by_visible_text('France')
request = requests.get("https://mobilerecharge.com/buy/mobile_recharge?country=Afghanistan&operator=Etisalat")
content = request.content
soup = BeautifulSoup(content, "html.parser")
# print(soup.prettify())
prov=soup.find("div", {"class": "operator active"})['data-operator_name']
# prov = soup.find("div", {"class": "operator deselected"})
print(prov)
operator = (prov.text.strip())

但这只是返回一个 NoneType ..所以有些不对劲,谁能告诉我我做错了什么?谢谢。

标签: pythonhtmlweb-scrapingbeautifulsoupfind

解决方案


您可以使用 CSS 选择器。CSS 选择器[data-operator_name]将选择任何带有属性的标签data-operator_name。美丽汤的例子:

data = """<div class="operator active" data-operator_name="Etisalat" data-
operator_id="5"><div class="operator_name_etisalat"></div></div>"""

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

print(soup.select_one('[data-operator_name]')['data-operator_name'])

这将打印:

Etisalat

编辑:

要选择具有属性“data-operator_name”的多个标签,请使用.select()方法:

data = """<div class="operator active" data-operator_name="Etisalat" data-
operator_id="5"><div class="operator_name_etisalat"></div></div>"""

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')
for tag in soup.select('[data-operator_name]'):
    print(tag['data-operator_name'])

推荐阅读