[問題] 同樣的xpath卻不一定能抓到東西?

作者: clsmbstu   2018-04-11 00:20:23
我正想挑戰用Python爬蟲,但越爬越發現好像碰到大魔王...
由於是aspx網頁,用requests去造訪網頁不會抓到動態表格的全部內容,
不知道我有沒有理解錯?
但是我在實作selenium的過程中發現,原本我用requests還能抓到的資料,
到了selenium卻抓不到,只剩空list?
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沒抓到東西。
但是,實際上這個xpath在我用requests抓時是有用的:
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. 這種狀況,如果要繼續用selenium的話要如何解決?
2. 我在網路上找到可以透過browser.find_element_by_xpath(xpath).click()的方式,
去按「下一頁」,但是在我想爬的這個網站裡,
上一頁跟下一頁按鈕的xpath我不知道怎麼分...有人可以提點一下嗎?
或有其它的方式?
作者: s860134 (s860134)   2018-04-11 04:16:00
1. 我記得是因為 etree 在爬 html 結構時不計入 tbody所以在 selenium 要用 table 耙仔帶的時候要多一層tbody//table[@class='ms-listviewtable']/tbody/tr你這個網站上一頁下一頁都有個 <td id="pagingWPQ2next">沒有什麼無法區分的問題吧
作者: clsmbstu   2018-04-11 09:54:00
你給的xpath可以抓到東西,感謝!但本文兩段都是用etree爬的,我還是不懂為什麼有此差別可以請你再解說詳細一點嗎?另外,就是因為上下頁都有<td id="pagingWPQ2next">,我要怎麼控制我不是點到上一頁而是下一頁?等等,我發現上一頁是<td id="pagingWPQ2prev">,抱歉

Links booklink

Contact Us: admin [ a t ] ucptt.com