同一个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
我正在抓取此网站,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