iT邦幫忙

0

關於【Python爬蟲】提問

最近在自學python爬蟲,卻遇到了問題,想請求幫解惑,程式碼如下:
https://ithelp.ithome.com.tw/upload/images/20211207/201446018xbxIYMKyt.png

https://ithelp.ithome.com.tw/upload/images/20211207/20144601KMJ3hm0kWB.png
想抓取的是table class="itinerary-controls"底下的第一個tr,但總在第24行出現找不到的錯誤訊息,請問到底是哪裡出錯了?
錯誤訊息如下:
https://ithelp.ithome.com.tw/upload/images/20211207/20144601fnv8hoWTZr.png

爬蟲的網址:https://www.railway.gov.tw/tra-tip-web/tip/tip001/tip112/querybytime

fillano iT邦超人 1 級 ‧ 2021-12-07 19:35:14 檢舉
soup.find("table"...)沒找到東西,所以tag_table是NoneObject。
遇到這類用crfs擋爬蟲的,你也只能用selenium來模擬瀏覽器的滑鼠鍵盤來爬了,會比較慢,但很難被擋下來,除非站方動用混合型的【我不是機器人】,遇到了就要認栽(除非你有更強大的人工智能來判斷圖片...)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
fillano
iT邦超人 1 級 ‧ 2021-12-07 19:51:37
最佳解答

csrf是伺服器動態產生用來擋Cross Site Request Forgery用的token,如果這欄不對,post出去不會得到結果,所以你也找不到你要找的table。

你得到這一頁的前一頁送一次request來取這個token,然後送出post。這個前一頁應該是:https://www.railway.gov.tw/tra-tip-web/tip/tip001/tip112/gobytime

csrf在form標籤裡的樣子:
https://ithelp.ithome.com.tw/upload/images/20211207/20000108eAbxzVk3PD.png

我要發表回答

立即登入回答