在美丽的汤中缩小XPath

时间:2016-03-22 14:03:37

标签: python xpath web-scraping

尝试点击可以随机复制到页面上其他位置的链接,以便根据该表中的其他内容缩小范围。

soup = BeautifulSoup(Driver.page_source, "html5lib")
for EachTable in soup.find_all("tr"):
  if data_check in EachTable.get_text():
    links = Driver.find_elements_by_xpath("span[contains(.,'%s')]" % data_to_check)

我的XPath并不好。我知道// span等...会定位该页面上的所有内容并且有效,但是如果有重复内容我需要将其缩小到EveryTable的那一部分。

我试过了:

links = EachTable.find_elements_by_xpath("span[contains(.,'%s')]" % data_to_check)

但这是一个很长的镜头,显然它并不支持find_elements_by_xpath。

因此,如果我可以缩小它并且data_to_check在EachTable中,则可以通过这种方式将我的Xpath限制到该表,或者我是否必须更改整个Xpath以查看完整表以查看它是否包含data_to_check ?

是否可以像这样做Xpath?

links = Driver.find_elements_by_xpath("//tr[contains(.,'%s')]" % tr_data and //span[contains(.,'%s')]" % span_data)

我不确定语法,但会得到相同的结果,可能效率更高。

1 个答案:

答案 0 :(得分:1)

问:是否有可能像这样做Xpath?

//tr[contains(.,'%s')]" % tr_data and //span[contains(.,'%s')]" % span_data)

应该是这样的:

"//tr[contains(.,'%s')]//span[contains(.,'%s')]" % (tr_data,span_data)

这将使用tr_data查找tr内的span_data的所有范围。