相同的xpath会从同一网页生成不同的提取结果

时间:2018-04-10 15:02:49

标签: python selenium xpath web-crawler lxml

我正在抓取这个网站https://www.ntuh.gov.tw/labmed/檢驗目錄/Lists/2015/BC.aspx。它是一个aspx,所以我计划使用selenium在同一个url中获取表的多个页面。但是,即使我相信我正在使用正确的xpath,我也无法提取表。

import requests
from selenium import webdriver
from time import sleep
from lxml import etree, html

url = "https://www.ntuh.gov.tw/labmed/檢驗目錄/Lists/2015/BC.aspx"
browser = webdriver.Chrome()
browser.get(url)
# The url is visited with Chrome correctly
root = etree.fromstring(browser.page_source, etree.HTMLParser())
root.xpath("//table[@class='ms-listviewtable']/tr")
# It gives me [] while browser.page_source is a string of html

尽管如此,我可以使用完全相同的xpath来成功获取(部分)数据 - 除了只能抓取表格第一页上的信息,这是不可取的。

result = ""
while result == "":
    try:
        # Certificate is not verified to bypass the SSLError
        # Not secure though
        result = requests.get(url, verify = False)
        break
    except:
        sleep(5)
        continue
# Transform it into an element tree
root = etree.fromstring(result.content, etree.HTMLParser())
# Parse the information with Xpath
root.xpath("//table[@class='ms-listviewtable']/tr")
# It gives me many elements of tr tags

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我能够在浏览器中成功运行以下内容以检索第一页和第二页上的表

$x("//table[@class='ms-listviewtable']//tr")

唯一的区别是我有双//tr与单/tr

/失败,因为tr不是table元素的直接子元素

您可以在此处阅读Xpath:https://devhints.io/xpath