获取属性值 BeautifulSoup
get attribute value BeautifulSoup
我有一个从网页中提取的元素列表:
property_list_items = soup.find_all("li", class_="hover propertyCard property-data-elem clickable")
if len(property_list_items) > 0:
for property_item in property_list_items:
print property_item.meta['content']
print soup(itemprop="geo")[0].get_text()
property_item
元素开始是这样的:
<li class="hover propertyCard property-data-elem clickable" data-city="Atlanta" data-feed-id="12310" data-list-index="0" data-location-id="52412" data-property-id="9000022319" data-property-state-code="GA" data-property-status="For Rent" id="propertyAnchor_0" itemscope="" itemtype="http://schema.org/ApartmentComplex">
<div itemprop="geo" itemscope="" itemtype="http://schema.org/GeoCoordinates">
<meta content="33.82555" itemprop="latitude"/>
<meta content="-84.33807" itemprop="longitude"/>
</div>
...
现在,当我遍历列表中的所有元素时,我想提取存储在属性中的特定信息 - 地理坐标。
我想这样说:
property_item['latitude']
并得到值 33.82555
然而,到目前为止我没有运气。 property_item.meta['content']
仅产生第一个 "value" (33.82555),而 soup(itemprop="geo")[0].get_text()
return 为空结果。
我希望能够一次解析一个特定元素,最好不要使用 find_all()
(如果可能的话),因为 latitude
和 longitude
只会使在特定 属性 的上下文中有意义,我还需要将它们与 属性 id 等联系起来
对于一个新手问题,提前致歉。
您可以 select 通过属性文本使用 css select 或者,即使用元标记中的 itemprop 值:
In [1]: from bs4 import BeautifulSoup
In [2]: h = """<li class="hover propertyCard property-data-elem clickable" data-city="Atlanta" data-feed-id="12310" data-list-index="0" data-location-id="52412" data-property-id="9000022319" data-property-state-code="GA" data-property-status="For Rent" id="propertyAnchor_0" itemscope="" itemtype="http://schema.org/ApartmentComplex">
...: <div itemprop="geo" itemscope="" itemtype="http://schema.org/GeoCoordinates">
...: <meta content="33.82555" itemprop="latitude"/>
...: <meta content="-84.33807" itemprop="longitude"/>
...: </div>
...: </li>"""
In [3]: soup = BeautifulSoup(h,"lxml")
In [4]: lat, lon = soup.select_one("meta[itemprop=latitude]")["content"], soup.select_one("meta[itemprop=longitude]")["content"]
In [5]: print(lat,lon)
('33.82555', '-84.33807')
meta[itemprop=latitude]
使用 css selector 查找具有文本值 latitude 的 itemprop 的元标记] 然后你从中提取内容和 longitude.
的相同逻辑
如果您想更具体一些,您可以通过 hover... class 找到 li 并拉来自那个的元标记。
li = soup.select_one("li.hover.propertyCard.property-data-elem.clickable")
lat, lon = li.select_one("meta[itemprop=latitude]")["content"], li.select_one("meta[itemprop=longitude]")["content"]
print(lat,lon)
或者使用 div 和 geo 的 itemprop 值。
geo = soup.select_one("div[itemprop=geo]")
lat, lon = geo.select_one("meta[itemprop=latitude]")["content"], geo.select_one("meta[itemprop=longitude]")["content"]
print(lat,lon)
我有一个从网页中提取的元素列表:
property_list_items = soup.find_all("li", class_="hover propertyCard property-data-elem clickable")
if len(property_list_items) > 0:
for property_item in property_list_items:
print property_item.meta['content']
print soup(itemprop="geo")[0].get_text()
property_item
元素开始是这样的:
<li class="hover propertyCard property-data-elem clickable" data-city="Atlanta" data-feed-id="12310" data-list-index="0" data-location-id="52412" data-property-id="9000022319" data-property-state-code="GA" data-property-status="For Rent" id="propertyAnchor_0" itemscope="" itemtype="http://schema.org/ApartmentComplex">
<div itemprop="geo" itemscope="" itemtype="http://schema.org/GeoCoordinates">
<meta content="33.82555" itemprop="latitude"/>
<meta content="-84.33807" itemprop="longitude"/>
</div>
...
现在,当我遍历列表中的所有元素时,我想提取存储在属性中的特定信息 - 地理坐标。
我想这样说:
property_item['latitude']
并得到值 33.82555
然而,到目前为止我没有运气。 property_item.meta['content']
仅产生第一个 "value" (33.82555),而 soup(itemprop="geo")[0].get_text()
return 为空结果。
我希望能够一次解析一个特定元素,最好不要使用 find_all()
(如果可能的话),因为 latitude
和 longitude
只会使在特定 属性 的上下文中有意义,我还需要将它们与 属性 id 等联系起来
对于一个新手问题,提前致歉。
您可以 select 通过属性文本使用 css select 或者,即使用元标记中的 itemprop 值:
In [1]: from bs4 import BeautifulSoup
In [2]: h = """<li class="hover propertyCard property-data-elem clickable" data-city="Atlanta" data-feed-id="12310" data-list-index="0" data-location-id="52412" data-property-id="9000022319" data-property-state-code="GA" data-property-status="For Rent" id="propertyAnchor_0" itemscope="" itemtype="http://schema.org/ApartmentComplex">
...: <div itemprop="geo" itemscope="" itemtype="http://schema.org/GeoCoordinates">
...: <meta content="33.82555" itemprop="latitude"/>
...: <meta content="-84.33807" itemprop="longitude"/>
...: </div>
...: </li>"""
In [3]: soup = BeautifulSoup(h,"lxml")
In [4]: lat, lon = soup.select_one("meta[itemprop=latitude]")["content"], soup.select_one("meta[itemprop=longitude]")["content"]
In [5]: print(lat,lon)
('33.82555', '-84.33807')
meta[itemprop=latitude]
使用 css selector 查找具有文本值 latitude 的 itemprop 的元标记] 然后你从中提取内容和 longitude.
如果您想更具体一些,您可以通过 hover... class 找到 li 并拉来自那个的元标记。
li = soup.select_one("li.hover.propertyCard.property-data-elem.clickable")
lat, lon = li.select_one("meta[itemprop=latitude]")["content"], li.select_one("meta[itemprop=longitude]")["content"]
print(lat,lon)
或者使用 div 和 geo 的 itemprop 值。
geo = soup.select_one("div[itemprop=geo]")
lat, lon = geo.select_one("meta[itemprop=latitude]")["content"], geo.select_one("meta[itemprop=longitude]")["content"]
print(lat,lon)