iT邦幫忙

0

[網頁爬蟲]抓不到內容

  • 分享至 

  • xImage

請問各位大神。小弟之前用以下的程式可以抓到goodinfo的表格,但是現在卻抓不到了;請問有人知道應該如何修改嗎?感恩!
import requests
import pandas as pd

定義 URL 和 headers

url = 'https://goodinfo.tw/tw/StockFinDetail.asp?RPT_CAT=XX_M_YEAR&STOCK_ID=2330'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"}

使用 requests.get 取得資料

response = requests.get(url, headers=headers)

讓資料可以顯示中文,不會是亂碼

response.encoding = 'utf-8'

使用 Pandas 取得所有表格

dfs = pd.read_html(response.text)

取得第 17 個表格

seventeenth_table = dfs[16]

看更多先前的討論...收起先前的討論...
提供你的原始碼
Hey iT邦新手 2 級 ‧ 2024-05-20 09:59:41 檢舉
他有提供原始碼啊
haward79 iT邦研究生 1 級 ‧ 2024-05-20 19:00:50 檢舉
如果你查看 response.text 的結果
你會發現網頁根本還沒有載入完成,所以你會需要用其他方法
你這頁的內容是用js加載的
用 requests 不會執行javascript
你要改用 Selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

driver = webdriver.Chrome()

driver.get('https://goodinfo.tw/tw/StockFinDetail.asp?RPT_CAT=XX_M_YEAR&STOCK_ID=2330')

try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'txtFinBody'))
)
finally:
page_content = driver.page_source
dfs = pd.read_html(page_content)
seventeenth_table = dfs[16]

print(seventeenth_table)

driver.quit()
上面這個自己縮排
記得安装 Selenium 和 WebDriver
Selenium 用 pip 安裝:
pip install selenium

WebDriver要看你是什麼系統
如果是macOS可以用Homebrew安裝:
brew install chromedriver
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
haward79
iT邦研究生 1 級 ‧ 2024-05-20 19:13:16

如果你查看 response.text 的結果
你會發現網頁根本還沒有載入完成,所以你會需要用其他方法
因為 requests 沒辦法執行 JavaScript 等
給你個 Selenium 參考 (Selenium安裝可能比較麻煩,要查一下driver如何安裝)


from selenium import webdriver
import pandas as pd


url = 'https://goodinfo.tw/tw/StockFinDetail.asp?RPT_CAT=XX_M_YEAR&STOCK_ID=2330'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"}

browser = webdriver.Firefox()
browser.get(url)
source_code = browser.page_source
browser.quit()

dfs = pd.read_html(source_code)
seventeenth_table = dfs[16]

print(seventeenth_table)

這邊是我測試跑完的結果,看起來是沒問題
https://ithelp.ithome.com.tw/upload/images/20240520/20131956Ay19RGNilf.png](_)

我要發表回答

立即登入回答