我試圖從https://etfdb.com/etfs/sector/technology/#etfs&sort_name=assets_under_management&sort_order=desc&page=1作為個人專案抓取一些 ETF 股票資訊。
我想要做的是抓取為每個頁面顯示的表格,但即使我更新了 url 中的頁碼,它似乎總是回傳相同的值。是否有某種限制或與我沒有考慮的網頁有關?我該怎么做才能從上面的鏈接中抓取第 1 頁到第 5 頁的表格?
我嘗試使用的代碼如下:
import pandas as pd
import requests
def etf_table_scraper(industry):
# instatiate empty dataframe
df = pd.DataFrame()
# cycle through the pages
for page in range(1, 10):
url = f"https://etfdb.com/etfs/sector/{industry}/#etfs__returns&sort_name=symbol&sort_order=asc&page={page}"
r = requests.get(url)
df_list = pd.read_html(r.text)[0] # this parses all the tables in webpages to a list
# if first page, append
if page == 1:
df = df.append(df_list[0].iloc[:-1])
# otherwise check to see if there are overlaps
elif df_list.loc[0, 'Symbol'] not in df['Symbol'].unique():
df = df.append(df_list.iloc[:-1])
else:
break
return df
uj5u.com熱心網友回復:
所以我在使用請求時看到了和你一樣的問題。盡管使用 Selenium 并單擊下一頁按鈕,但我能夠解決此問題。這是一些示例代碼,您需要將其重新撰寫到您的流程中,因為這僅用于測驗。
from selenium import webdriver
from time import sleep
import random
df = pd.DataFrame()
driver=webdriver.Chrome(executable_path="C:\chromedriver_win32\chromedriver.exe") ## Add your own path here
driver.get("https://etfdb.com/etfs/sector/technology/#etfs&sort_name=assets_under_management&sort_order=desc&page=1")
sleep(2)
text = driver.page_source # Get page source to get table
table_pg1 = pd.read_html(text)[0].iloc[:-1]
df = df.append(table_pg1)
sleep(2)
for i in range(1, 4):
driver.find_element_by_xpath('//*[@id="featured-wrapper"]/div[1]/div[4]/div[1]/div[2]/div[2]/div[2]/div[4]/div[2]/ul/li[8]/a').click()# Click next page button
sleep(3)
text = driver.page_source
table_pg_i = pd.read_html(text)[0].iloc[:-1]
df = df.append(table_pg_i)
driver.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/399875.html
上一篇:使用Python兩次溢位列
