无法使用 selenium webdriver 获取所有 table 元素
Can't get all table elements using selenium webdriver
我正在尝试使用 Python/Selenium 从该网站获取所有信息:
https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html
我已经成功获取了所有信息,但问题是它有 100 个元素,而我只获取了前 19 个(第一次加载页面时可以在 Chromium window 中看到的元素)。
我试着像这样向下滚动页面:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.find_element_by_tag_name('body').send_keys(Keys.END)
driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
等。它正在运行,但没有任何变化。我仍然只得到 100 个中的 19 个元素。我还尝试更改参数,例如 windows 大小、无头、最大化...等...没有任何改变。
chrome_driver_binary = "C:\scraping\selenium\chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_argument('--lang=en')
options.add_argument("--disable-extensions")
options.add_argument('--headless')
options.add_argument('--window-size=1920x1480')
options.binary_location = "C:\Program Files (x86)\BraveSoftware\Brave-Browser\Application\brave.exe"
如果我在Selenium创建的chrome window主代码中手动编辑,我可以看到这里有所有元素。我也可以看到 window 如何向下滚动到底部。
那么,问题出在哪里?
这是成功捕获所有数据的主要代码(但只有 19 个第一个元素)。我把它放在以防它很重要。
TABLE_RESULT_BTC_TOP100 = soup1.find('table', id="tblOne").find('tbody')
for tr_tag in TABLE_RESULT_BTC_TOP100.find_all('tr'):
前 19
行在一个 table 中,接下来的行在另一个 table 中。你必须抓住 both tables.
此外,不需要 selenium
。
以下是获取所有 100
行的方法。
import requests
import pandas as pd
url = "https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0",
}
df = pd.read_html(requests.get(url, headers=headers).text, flavor="lxml")[2:4]
df = pd.concat(df)
print(df)
输出:
0 1 ... Outs Unnamed: 0
0 NaN NaN ... 449.0 1.0
1 NaN NaN ... 78.0 2.0
2 NaN NaN ... 77.0 3.0
3 NaN NaN ... NaN 4.0
4 NaN NaN ... NaN 5.0
.. ... ... ... ... ...
76 96.0 bc1qxv55wuzz4qsfgss3uq2zwg5y88d7qv5hg67d2d ... NaN NaN
77 97.0 bc1qmjpguunz9lc7h6zf533wtjc70ync94ptnrjqmk ... NaN NaN
78 98.0 bc1qyr9dsfyst3epqycghpxshfmgy8qfzadfhp8suk ... NaN NaN
79 99.0 bc1q8qg2eazryu9as20k3hveuvz43thp200g7nw7qy ... NaN NaN
80 100.0 bc1q4ffskt6879l4ewffrrflpykvphshl9la4q037h ... NaN NaN
[100 rows x 20 columns]
我正在尝试使用 Python/Selenium 从该网站获取所有信息: https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html
我已经成功获取了所有信息,但问题是它有 100 个元素,而我只获取了前 19 个(第一次加载页面时可以在 Chromium window 中看到的元素)。
我试着像这样向下滚动页面:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.find_element_by_tag_name('body').send_keys(Keys.END)
driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
等。它正在运行,但没有任何变化。我仍然只得到 100 个中的 19 个元素。我还尝试更改参数,例如 windows 大小、无头、最大化...等...没有任何改变。
chrome_driver_binary = "C:\scraping\selenium\chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_argument('--lang=en')
options.add_argument("--disable-extensions")
options.add_argument('--headless')
options.add_argument('--window-size=1920x1480')
options.binary_location = "C:\Program Files (x86)\BraveSoftware\Brave-Browser\Application\brave.exe"
如果我在Selenium创建的chrome window主代码中手动编辑,我可以看到这里有所有元素。我也可以看到 window 如何向下滚动到底部。
那么,问题出在哪里?
这是成功捕获所有数据的主要代码(但只有 19 个第一个元素)。我把它放在以防它很重要。
TABLE_RESULT_BTC_TOP100 = soup1.find('table', id="tblOne").find('tbody')
for tr_tag in TABLE_RESULT_BTC_TOP100.find_all('tr'):
前 19
行在一个 table 中,接下来的行在另一个 table 中。你必须抓住 both tables.
此外,不需要 selenium
。
以下是获取所有 100
行的方法。
import requests
import pandas as pd
url = "https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0",
}
df = pd.read_html(requests.get(url, headers=headers).text, flavor="lxml")[2:4]
df = pd.concat(df)
print(df)
输出:
0 1 ... Outs Unnamed: 0
0 NaN NaN ... 449.0 1.0
1 NaN NaN ... 78.0 2.0
2 NaN NaN ... 77.0 3.0
3 NaN NaN ... NaN 4.0
4 NaN NaN ... NaN 5.0
.. ... ... ... ... ...
76 96.0 bc1qxv55wuzz4qsfgss3uq2zwg5y88d7qv5hg67d2d ... NaN NaN
77 97.0 bc1qmjpguunz9lc7h6zf533wtjc70ync94ptnrjqmk ... NaN NaN
78 98.0 bc1qyr9dsfyst3epqycghpxshfmgy8qfzadfhp8suk ... NaN NaN
79 99.0 bc1q8qg2eazryu9as20k3hveuvz43thp200g7nw7qy ... NaN NaN
80 100.0 bc1q4ffskt6879l4ewffrrflpykvphshl9la4q037h ... NaN NaN
[100 rows x 20 columns]