我正在尝试使用 beautifulsoup 从以下列表中提取所有data-bk
属性(以下的x
,y
,z
) <a>
个带有class="bk3-link"
的标签。 html的示例如下:
<a class="bk3-link" data-bk="x" ... >
<a class="bk3-link" data-bk="y" ... >
<a class="bk3-link" data-bk="z" ... >
我尝试提取所有data-bk
属性,但它们在html中的其他位置使用。我尝试使用<a>
搜索所有class = "bk3-link"
标签,然后搜索其中的所有data-bk
。我无法理解需要这样做的语法。
import requests
from bs4 import BeautifulSoup
headers = {"User-Agent": "Google Chrome v6.9"}
r = requests.get("https://www.randomwebsite", headers=headers)
soup = BeautifulSoup(r.text, "html.parser")
data1 = soup.find_all("a", {"data-bk" : True})
data2 = soup.find_all("a", class="bk3-link").find("a", data-bk)
如果我将数据1打印到控制台,我将拥有大量的html,包括其他data-bk
属性。我真的只需要用data-bk
返回<a>
标记内的class="bk3-link"
属性。尝试运行data2我得到:
SyntaxError:语法无效
答案 0 :(得分:0)
您可以在find_all()
中指定多个属性。
data1 = soup.find_all("a", attrs = {"class": "bk3-link", "data-bk": True})
答案 1 :(得分:0)
一个可能的解决方案是使用CSS选择器".bk3-link[data-bk]"
-这将选择类bk3-link
且包含属性data-bk
的所有标签:
data = '''
<a class="bk3-link" data-bk="x">xxx</a>
<a data-bk="y">DONT SELECT</a>
<a class="bk3-link" data-bk="y">xxx</a>
<a class="bk3-link" data-bk="z">xxx</a>
<a data-bk="q">DONT SELECT</a>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'html.parser')
for tag in soup.select('.bk3-link[data-bk]'):
print(tag['data-bk'])
打印:
x
y
z