如何在Python中使用BeautifulSoup拉取div属性

时间:2016-09-06 15:08:59

标签: python beautifulsoup

我试图提取这些数据(lat和lng):

<div class="location"
    lat="1234"
    lng="5678"
>

这没有给我任何东西:

print (soup.find_all("div", { "class" : "location"}))

我最终的目标是将这些值存储在字典中。感谢。

3 个答案:

答案 0 :(得分:2)

你可以在BeautifulSoup中使用字典对元素属性的访问

locations = [{'lat': location['lat'], 'lng': location['lng']}
             for location in soup.find_all("div", {"class": "location"})]

如果只有一个位置,请改用find()

location = soup.find("div", {"class": "location"})
print({'lat': location['lat'], 'lng': location['lng']})
  

这不给我什么

这是一个单独的问题。您可能在解析的HTML中没有此元素。

答案 1 :(得分:1)

您当前的print正在返回结果的列表

[<div class="location" lat="1234" lng="5678"></div>]

您可以通过迭代每个结果来访问这些:

for r in results:
    print(r['lat'], r['lng'])

包含两个div元素的完整示例如下所示:

from bs4 import BeautifulSoup

html = """<div class="location"
    lat="1234"
    lng="5678"
>
<div class="location"
    lat="9101"
    lng="1213"
>"""
soup = BeautifulSoup(html, 'html.parser')
results = soup.find_all("div", { "class" : "location"})
for r in results:
    print(r['lat'], r['lng'])

这打印出两个结果:

('1234', '5678')
('9101', '1213')

答案 2 :(得分:0)

从BeautifulSoup文档中,您可能使用了find_all()错误。 https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-keyword-arguments

尝试:

print (soup.find_all("div",class_="location"))

print (soup.find_all("div",attrs={"class": "location"}))