python - 无法找出此 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 ..所以有些不对劲,谁能告诉我我做错了什么?谢谢。
解决方案
您可以使用 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'])