请求和解析股票数据,但有多个页面
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
更新:这对我有用。我不确定是什么破坏了它,但您可以通过以下方式进一步调试 -
- 尝试检查
xpath
在您的 selenium 浏览器中是否也相同。
- 在while循环前加一个
time.sleep(2)
。
我使用以下代码尝试抓取 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
更新:这对我有用。我不确定是什么破坏了它,但您可以通过以下方式进一步调试 -
- 尝试检查
xpath
在您的 selenium 浏览器中是否也相同。 - 在while循环前加一个
time.sleep(2)
。