我想恢复位于下表中的数字: the site
<table class="table table-hover table-inx">
<tbody><tr>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
<td class=""><label for="RentNet">Miete (netto)</label></td>
<td>478,28 €</td>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
<td class=""><label for="Rooms">Zimmer</label></td>
<td>4</td>
</tr>
</tbody></table>
我认为这种奇怪的格式是因为表条目是可选的。我使用 driver.find_element_by_css_selector(“table.table.table-hover”)来到表中,我看到如何轻松地遍历 <tr>
标签。但是如何使用 <td>
&gt; < <tr>
找到第二个 <label for="Rooms"
来保存数据< / em>?
是否有比“找到一位数字的唯一td字段”更优雅的方式或加载详细信息页面?
This similar question没有帮助我,因为有问题的标签有id
编辑:
我刚刚在相关问题的答案中发现了关于Xpath / CSS选择器的very helpful cheat sheet:它包含引用子/父,下一个表条目等的方法
答案 0 :(得分:4)
您可以使用td
选择相应的driver.find_element_by_xpath()
代码。您应该使用的XPath
表达式如下:
`'//label[@for="Rooms"]/parent::td/following-sibling::td'`
这会选择label
标记,for
属性等于Rooms
,然后导航到其父td
元素,然后导航到以下td
元素
所以你的代码将是:
elem = driver.find_element_by_xpath(
'//label[@for="Rooms"]/parent::td/following-sibling::td')
XPath表达式的一个示例是 here 。
答案 1 :(得分:1)
使用xpath,您可以创建搜索包含其他元素的元素,如下所示:
elem = driver.find_element_by_xpath('//tr[./td/label[@for="Rooms"]]/td[2]')
elem
变量现在将在“Rooms”标签行中保存第二个td元素(这正是您要查找的内容)。您还可以将tr元素分配给变量,然后使用行中的所有数据,因为您知道单元格结构(如果您想使用标签和数据)。
答案 2 :(得分:0)
你试过xpath吗? Firebug是一个复制xpath的好工具。它将使用索引来选择所需的元素。当您的元素没有名称或ID时,它特别有用。
编辑:不知道为什么我被投了票?我去了网站,发现XPath Firebug给了我:
/html/body/div[2]/div[7]/div[2]/div[3]/div/div[1]/div/div[3]/div[3]/div/table/tbody/tr[7]/td[2]
要获得4,只需:
xpath = "/html/body/div[2]/div[7]/div[2]/div[3]/div/div[1]/div/div[3]/div[3]/div/table/tbody/tr[7]/td[2]"
elem = driver.find_element_by_xpath(xpath)
print elem.text # prints '4'
要获得&#34; rooms&#34;的所有元素,您只需使用部分xpath driver.find_elements_by_xpath,就像这样:
xpath = "/div/div[1]/div/div[3]/div[3]/div/table/tbody/tr[7]/td[2]"
elems = driver.find_elements_by_xpath(xpath) # returns list
for elem in elems:
print elem.text # prints '3', '3', '4'
最后,您可以使用页面源获取数据。 首先,让我们在输入页面源时输出一个房间列表:
def get_rooms(html):
rooms = list()
partials = html.split('''<label for="Rooms">''')[1:]
for partial in partials:
partial = partial.split("<td>")[1]
room = partial.split("</td>")[0]
rooms.append(room)
return rooms
一旦我们定义了该功能,我们就可以通过以下方式检索房间号码列表:
html = driver.page_source
print get_rooms(html)
应输出:
["3", "3", "4"]