Python& BS4:开始搜索从某个div开始的术语

时间:2014-11-23 23:55:16

标签: python html python-2.7 beautifulsoup python-requests

Python 2.7.6 + BeautifulSoup 4 +在这里请求noob。

我的问题是关于搜索div类的内容,例如on this site。 我只想在每列包含信息时使用行的内容。 我能够编写一段代码来提取fuelprice的div级内容(在网站上是第1列)。有时,首先列出的加油站是关闭的,没有价格出现。所以我的代码抓住了实际包含价格的第一个div。

pricediv = soup.find("div", {"class": "price"})
price = pricediv.text

接下来,我想获取我从中提取价格的加油站的名称和地址,这些加油站包含在另外两个div类中。我怎么做

location = soup.find("div", {"class": "location_name"})

开始搜索包含我先前提取的汽油价格的div级的位置?否则,如果前两个加油站关闭,我的可变价格将包含第三加油站的汽油价格。但是如果我运行代码来找到位置(如上所述),它将返回第一个位置(封闭的加油站号1)。所以我希望它开始在price-div之后寻找位置div。

我希望我明确表达了我要找的东西,而且有人可能会暗示我。提前谢谢!

1 个答案:

答案 0 :(得分:0)

根据您提供的链接,您的价格 div是 priceblock div 的子级,这也是 price_entry_table div 的子级,所以在为了找到你想要的 div ,你需要使用parent,它应该是这样的:

pricediv = soup.find('div', {'class': 'price'})
price = pricediv.text
# use parent.parent to get to the price_entry_table div, then find location_name
locationdiv = pricediv.parent.parent.find('div', {'class': 'location_name'})
location = locationdiv.text
print price, location

# sample result
1.379 Tankstelle Wagner/DBV Würzburg

此外,如果您需要访问所有div,您可能希望使用像@PadraicCunningham这样的findAll,如下所示:

for pricediv in soup.findAll('div', {'class': 'price'}):
    price = pricediv.text
    ... do your remaining code here ...