同一个xpath从同一个网页中产生不同的提取结果

The same xpath yields different extraction results from the same webpage

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

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 成功获取(部分)数据 - 除了只能抓取 table 第一页上的信息,这是不可取的。

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

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

我能够在浏览器中成功 运行 检索第一页和第二页上的 table

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

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

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

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