同一xpath从同一个webpag生成不同的提取结果

2024-04-23 11:11:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这个网站上爬行,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

为什么会这样?我该怎么解决?你知道吗


Tags: fromhttpsimportbrowserurliswwwroot
1条回答
网友
1楼 · 发布于 2024-04-23 11:11:14

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

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

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

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

您可以在这里阅读Xpath:https://devhints.io/xpath

相关问题 更多 >