【发布时间】:2023-03-23 19:55:02
【问题描述】:
我有 C 方面的经验,我开始接触 Python,主要是为了好玩。 我正在尝试在这里https://www.justetf.com/it/find-etf.html?groupField=index&from=search&/it/find-etf.html%3F1-1.0-esearch-etfsPanel 抓取此页面。 由于包含我感兴趣的内容的表格是在连接到页面后动态创建的,因此我正在使用:
- Selenium 在浏览器中加载页面
- 美丽的汤4用于抓取加载的数据
目前,我能够抓取前 25 个条目的所有感兴趣的字段,这些条目一旦连接到页面就会加载。我在一页中最多可以有 100 个条目,但总共有 1045 个条目,它们被分成不同的页面。问题是所有页面的 url 都是相同的,并且表格的内容是在运行时动态加载的。 我想做的是找到一种能够抓取所有条目的方法,即 1045。通过互联网阅读,我知道我应该发送一个正确的 POST 请求(我还发现他们正在从@检索数据987654322@) 从我的代码中,从响应中获取数据并抓取它。 我可以看到两种可能性:
- 一次检索所有条目
- 一个接一个地检索,然后一个接一个地抓取
我不知道如何构建 POST 请求。 我认为没有必要发布代码,但如果需要,我可以重新编辑问题。 在此先感谢大家。
已编辑
这里有一些代码
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from bs4 import BeautifulSoup
import requests
firefox_binary = FirefoxBinary('some path\\firefox.exe')
browser = webdriver.Firefox(firefox_binary=firefox_binary)
url = "https://www.justetf.com/it/find-etf.html"
browser.get(url)
delay = 5 # seconds
try:
myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'Alerian')))
print("Page is ready!")
except TimeoutException:
print ("Loading took too much time!")
page_source = browser.page_source
soup = BeautifulSoup(page_source, 'lxml')
从这里开始,我只是玩了一下 bs4 API。
【问题讨论】:
-
加载页面时重定向到
https://www.justetf.com/de-en/。我们需要登录吗?如果没有 - 你想刮什么桌子?另外请编辑您已经尝试过的代码。 -
感谢@MendelG,在描述中进行了编辑。您无需登录。
标签: python selenium beautifulsoup datatables screen-scraping