以下是HTML代码段:
<section class="node_category" id="kui_3_1515304072474_68">
<h3 class="">User details</h3>
<ul class="" id="kui_3_1515304072474_67">
<li class="contentnode" id="kui_3_1515304072474_66">
<dl id="kui_3_1515304072474_65">
<dt class="">Country
</dt>
<dd class="" id="kui_3_1515304072474_64">United States
</dd>
</dl></li>
<li class="contentnode">
<dl>
<dt class="">City/town
</dt>
<dd class="">Somewhere
</dd>
</dl></li>
<li class="contentnode" id="kui_3_1515304072474_76">
<dl id="kui_3_1515304072474_75">
<dt class="">Company
</dt>
<dd class="" id="kui_3_1515304072474_74">ABC Inc
</dd>
</dl></li>
</ul></section>
我想通过XPath从以下HTML类中提取文本:
/ul/li[@class='contentnode'][3]/dl/dd
此“contentnode”类具有从1到最大6的多个位置,用于其他页面。在此示例中,最大值为3。 为了指定所有位置,我构建如下的XPath:
//li[@class='contentnode'][1 <= position() and position() < 7]/dl/dd
现在,我插入我的Python代码,如下所示:
from selenium import webdriver
lst=[]
browser = webdriver.Chrome('./path')
url = "https://<target URL>"
browser.get(url)
contents = browser.find_elements_by_xpath("//li[@class='contentnode'][1 <= position() and position() < 7]/dl/dd")
for t in contents:
lst.append([t.text])
print(lst)
但是,输出仅显示位置1.它应显示位置1到6的所有文本。
[编辑] 我也试过了,
//li[@class='contentnode'][contains(@id,'kui_3')]/dl/dd
但仍然无效。它没有显示任何错误,但结果都没有。
我的代码出了什么问题?
答案 0 :(得分:1)
这是符合您需求的工作代码:
from selenium import webdriver
lst = []
browser = webdriver.Chrome()
browser.get("https://<target URL>")
contents = browser.find_elements_by_xpath("//li[@class='contentnode'][1 <= position() and position() < 7]/dl/dd")
for t in contents:
lst.append(t.text)
print(lst)
browser.quit()
结果将是(根据您的HTML):
['United States', 'Somewhere', 'ABC Inc']
希望它可以帮到你!
答案 1 :(得分:1)
尝试以下代码
from selenium import webdriver
lst=[]
browser = webdriver.Chrome('./path')
url = "https://<target URL>"
browser.get(url)
contents = browser.find_elements_by_xpath("//li[@class='contentnode']/dl/dd")
print len(contents)
for t in contents:
lst.append(t.text)
print(lst)
答案 2 :(得分:0)
您是否尝试使用css选择器?如果没有,那么你应该试一试:
DEBUG o.h.SQL:92 - select book0_.id as id1_1_, book0_.aut_id as aut_id2_1_ from book book0_ where book0_id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]
DEBUG o.h.SQL:92 - select author0_.id as id1_0_0_ from author author0_ where author0_.id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]