请求和解析股票数据,但有多个页面

Requesting and parsing stock data but with multiple pages

我使用以下代码尝试抓取 eToro 上公司的代码。我唯一的问题是此代码仅生成前 50 个,因为这是查看 url 时显示的数量。您可以在网站上展示更多内容,但这并未反映在请求中,所以我只是想知道是否有可能获得所有这些内容。

import requests
import json
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
options = Options()
driver = webdriver.Chrome("chromedriver.exe", options = options)
driver.get("https://www.etoro.com/discover/markets/stocks/exchange/london")

soup = BeautifulSoup(driver.page_source, 'html.parser')

soup = BeautifulSoup(driver.page_source, 'html.parser')
section = soup.find_all("a", attrs = {"class" : "card-avatar-wrap"})
firms = []
for i in range(len(section)):
    firms.append(section[i]["href"].split("/")[2]) 

建立在您的代码之上,这是一个工作示例。当然,它不是生产级代码,所以如果你想以更可重用的方式使用它,你可能需要添加更多的花里胡哨的东西。

import time
import requests
import json
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
options = Options()
driver = webdriver.Chrome(options = options)
driver.get("https://www.etoro.com/discover/markets/stocks/exchange/london")

firms = []

while True:
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    section = soup.find_all("a", attrs = {"class" : "card-avatar-wrap"})
    for i in range(len(section)):
        firms.append(section[i]["href"].split("/")[2])
        
    # The only new thing- try to click the button.
    try:
        _ = driver.find_element_by_xpath('/html/body/ui-layout/div/div/div[2]/et-discovery-markets-results/div/et-discovery-markets-results-header/div/div[2]/div/div[2]/a[2]')
        _.click()
        time.sleep(1) #add a delay
        
        if 'disabled' in _.get_attribute('class'):
            print('END- Last page reached')
            break 
    except:
        break

更新:这对我有用。我不确定是什么破坏了它,但您可以通过以下方式进一步调试 -

  1. 尝试检查 xpath 在您的 selenium 浏览器中是否也相同。
  2. 在while循环前加一个time.sleep(2)