【问题标题】:Same Values Returned When Scraping with BeautifulSoup使用 BeautifulSoup 抓取时返回相同的值
【发布时间】:2022-01-01 04:42:37
【问题描述】:

我正在尝试从 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

【问题讨论】:

    标签: python pandas web-scraping beautifulsoup


    【解决方案1】:

    所以我在使用请求时看到了与您相同的问题。尽管使用 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()
    

    【讨论】:

    • 感谢您提供此结构,它对我有用!
    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多