我试图从网页上提取一些文字。我想从中提取数据的页面源是:
<tbody>
<tr class="drx_dotted">
<td class="drx_first">
<span name="pharmacy"
longitude="-82.531457"
latitude="42.617612"
pharmacyname="CVS Pharmacy #"
address="1025 St Clair River Dr"
city="Algonac"
state="MI"
zip="48001"
phone="8107944941">
</span>
<p>
<strong>CVS Pharmacy #</strong><br />
1025 St Clair River Dr<br />
Algonac, MI 48001<br />
1-810-794-4941
</p>
<p>
<a class=""
data-ajax="true"
data-ajax-method="post"
data-ajax-success="UpdateSearchPharmacyList"
href="/pfdn/SharedPharmacy/AddNetworkPharmacy?pharmacyNABP=2352324&language=English">Add Pharmacy
<span class='HiddenText'> CVS Pharmacy #</span>
</a>
</p>
</td>
<td>
<p>
Retail
</p>
</td>
<td>
<p>
Not applicable
</p>
</td>
</tr>
我想拉出&#34;不适用&#34;靠近HTML代码的底部。这是&#34; p&#34;在第三个&#34; td&#34;在HTML源代码中。还有一堆这样的,所以我想把所有这些标签一起拉到python列表中。
以下是我用来查找HTML的硒代码:
x = driver.find_elements_by_xpath(
'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr/td[3]/p')
当我输入print(x)时,它打印出来:
[<selenium.webdriver.remote.webelement.WebElement object at 0x101f98210>,
<selenium.webdriver.remote.webelement.WebElement object at 0x101f98250>,
<selenium.webdriver.remote.webelement.WebElement object at 0x101f98290>]
所以selenium找到并拉出三个实例(这是正确的,它应该找到三个)。但是,当我尝试使用
来拉文本时print x[0].text
输出是:
None
我尝试了很多变化,甚至尝试单独找到每个元素,但它仍然无法正常工作。有谁有这个问题?我该如何解决?
由于
答案 0 :(得分:1)
问题是您有多个tr
标记,请获取相应的标记。使用find_element_by_xpath()
查找单个元素而不是列表,并使用以下xpath:
'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/p
python代码:
element = driver.find_elements_by_xpath(
'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/p')
请注意[1]
之后的tr
。这就是我们如何看待第一个tr
标记。
另请注意,xpath
看起来很脆弱 - 这是因为使用了索引:在此div中给我第二个div
,然后在第二个div
等等。使用divSearchResultContainer
id发布元素的完整内容有助于为您提供更好的解决方案。
答案 1 :(得分:0)
尝试使用xpath,我还没有测试,但xpath有last()运算符,这就是你想要的。
"//tbody//tr//td[last()]/p[last()]/text()"