我正在抓取这个网站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
为什么会这样,我该如何解决?
答案 0 :(得分:0)
我能够在浏览器中成功运行以下内容以检索第一页和第二页上的表
$x("//table[@class='ms-listviewtable']//tr")
唯一的区别是我有双//tr
与单/tr
单/
失败,因为tr
不是table
元素的直接子元素
您可以在此处阅读Xpath:https://devhints.io/xpath