首页 > 解决方案 > 无法使用 Beautiful Soup 和 Selenium 访问整个页面

问题描述

我一直在尝试使用漂亮的汤和硒来收集数据,但无法获得超过表上的前 20 个结果(总共超过 2000 个)。我看到了一些相关的问题和答案,建议尝试不同的解析器,所以我尝试了 lxml、html.parser 和 html5lib,但都没有奏效。我还看到一些建议使用 selenium 和 webdriver 的答案,但无法使用任何一个来获取整个页面。这是我现在的代码

import requests, time
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import urllib.request
#import pandas as pd
from bs4 import BeautifulSoup
import requests, time
import lxml

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://coinmarketcap.com/exchanges/uniswap-v2/')
#supposed to scroll to the bottom of the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

time.sleep(5)

page = driver.page_source
soup = BeautifulSoup(''.join(page), 'lxml')

pairs = soup.find_all('div', attrs = {"class" : "hmd6df-0 kCRNNr"})
data = [i.find_all('a')[0] for i in pairs]

任何帮助都是极好的。谢谢。

标签: seleniumselenium-webdriverbeautifulsoup

解决方案


我想出了一个纯粹的硒解决方案——下面的 python 脚本成功地从表中抓取了所有数据。我只是以这样的打印为例,您将想弄清楚如何组织您的数据。

更新:为了展开和抓取所有行,我滚动到列表底部,然后单击“展开更多”按钮,它展开了 100 多行。我迭代了足够多的时间来遍历 1850 行数据。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://coinmarketcap.com/exchanges/uniswap-v2/')

total_height = int(driver.execute_script("return document.body.scrollHeight"))
for x in range(20):

    for i in range(1, total_height, 130):
        driver.execute_script("window.scrollTo(0, {});".format(i))
    if x == 0:
        driver.find_element_by_css_selector('div.cmc-cookie-policy-banner__close').click()

    driver.find_element_by_xpath('//button[text() = "Load More"]').click()
time.sleep(2)
first_column = driver.find_elements_by_css_selector('td.cmc-table__cell.cmc-table__cell--sticky.cmc-table__cell--sortable.cmc-table__cell--left.cmc-table__cell--sort-by__rank > div')
second_column = driver.find_elements_by_css_selector('div.cwwgik-0.bCvAgC')
third_column = driver.find_elements_by_css_selector('div.hmd6df-0.kCRNNr')
fourth_column = driver.find_elements_by_css_selector('div.cmc-table__column-market-pair-volume-24h')
fifth_column = driver.find_elements_by_css_selector('div.cmc-table__column-market-pair-volume-percent')
sixth_column = driver.find_elements_by_css_selector('td.cmc-table__cell.cmc-table__cell--sortable.cmc-table__cell--right.cmc-table__cell--sort-by__quote-usd-effective-liquidity > div')
seventh_column = driver.find_elements_by_css_selector('td.cmc-table__cell.cmc-table__cell--sortable.cmc-table__cell--right.cmc-table__cell--sort-by__fee-type > div')
eighth_column = driver.find_elements_by_css_selector('div.ghkc60-0.fLaXDt')
for i in range(len(second_column)):
    print(str(first_column[i].get_attribute("innerText")) + ' ' + str(second_column[i].get_attribute("innerText")) + '  ' + str(third_column[i].get_attribute("innerText")) + '  ' + str(fourth_column[i].get_attribute("innerText")) + '  ' + str(fifth_column[i].get_attribute("innerText")) + '  ' + str(sixth_column[i].get_attribute("innerText")) + '  ' + str(seventh_column[i].get_attribute("innerText")) + '  ' + str(eighth_column[i].get_attribute("innerText")))

输出:

1 USD Coin USDC/WETH $250,651,977 20.81% 935 Percentage Recently
2 Fei Protocol FEI/WETH $157,435,972 13.07% - Percentage Recently
3 WETH WETH/USDT $153,706,066 12.76% 915 Percentage Recently
4 Dai DAI/WETH $58,995,907 4.90% 850 Percentage Recently
5 Tendies TEND/WETH $41,429,102 3.44% - Percentage 778 hours ago
6 Wrapped Bitcoin WBTC/WETH $37,838,161 3.14% 901 Percentage Recently
7 SHIBA INU SHIB/WETH $30,416,126 2.53% 612 Percentage Recently
...

1770 yplutus  yPLT/WETH  $?  0.00%  -  Percentage  671 hours ago
1771 Deflect  DEFLCT/RFI  $?  0.00%  -  Percentage  96 days ago
1772 Blaze DeFi  BNFI/WETH  $?  0.00%  -  Percentage  781 hours ago
1773 Buy-Sell  BSE/WETH  $?  0.00%  -  Percentage  Recently
1774 PIRANHAS  $PIR/WETH  $?  0.00%  -  Percentage  Recently
1775 HLand Token  HLAND/USDT  $?  0.00%  -  Percentage  Recently
1776 Hub - Human Trust Protocol  HUB/WETH  $?  0.00%  -  Percentage  126 days ago
1777 WETH  WETH/YVS  $?  0.00%  -  Percentage  Recently
1778 Reflector.Finance  RFCTR/WETH  $?  0.00%  -  Percentage  Recently
1779 WETH  WETH/R34P  $?  0.00%  -  Percentage  Recently
1780 WETH  WETH/RFR  $?  0.00%  265  Percentage  Recently
1781 Golden Ratio Per Liquidity  GRPL/WETH  $?  0.00%  -  Percentage  Recently
1782 xETH-G  xETH-G/WETH  $?  0.00%  -  Percentage  75 days ago
1783 3XT TOKEN  3XT/WETH  $?  0.00%  -  Percentage  62 days ago
1784 Diffract Finance  DFR/WETH  $?  0.00%  -  Percentage  Recently
1785 Bitpower  BPP/WETH  $?  0.00%  -  Percentage  Recently
1786 IDL Token  IDL/ELYX  $?  0.00%  -  Percentage  77 days ago
1787 IDL Token  IDL/WETH  $?  0.00%  -  Percentage  81 days ago
1788 Dai  DAI/BCC  $?  0.00%  -  Percentage  42 days ago
1789 Stand Share  SAS/USDT  $?  0.00%  -  Percentage  123 days ago
1790 Definex  Dswap/USDT  $?  0.00%  -  Percentage  314 hours ago
1791 Vaultz  VAULTZ/WETH  $?  0.00%  -  Percentage  781 hours ago
1792 Fission Cash  FCX/WETH  $?  0.00%  -  Percentage  Recently
1793 DeltaHub Community  DHC/USDT  $?  0.00%  -  Percentage  821 hours ago
1794 Dai  DAI/DST  $?  0.00%  -  Percentage  111 days ago
1795 AGAr  AGAr/WETH  $?  0.00%  -  Percentage  311 hours ago
1796 Basis Cash  BAC/Mars  $?  0.00%  -  Percentage  809 hours ago
1797 Tether  USDT/NOW  $?  0.00%  -  Percentage  781 hours ago
1798 USD Coin  USDC/wCUSD  $?  0.00%  -  Percentage  Recently
1799 zzz.finance v2  ZZZV2/WETH  $?  0.00%  -  Percentage  781 hours ago
1800 Rigel Finance  RIGEL/WETH  $?  0.00%  -  Percentage  Recently
1801 Bitbot Protocol  BBP/WETH  $?  0.00%  -  Percentage  Recently
1802 HeroSwap  HERO/WETH  $?  0.00%  -  Percentage  108 days ago
1803 XUSD Stable  XUSD/LINK  $?  0.00%  -  Percentage  69 days ago
1804 XUSD Stable  XUSD/DAI  $?  0.00%  -  Percentage  96 days ago
1805 CURE Farm  CURE/WETH  $?  0.00%  -  Percentage  Recently
1806 WETH  WETH/stETH  $?  0.00%  518  Percentage  Recently
1807 Xstable.Protocol  XST/WETH  $?  0.00%  -  Percentage  Recently
1808 ZCore  WZCR/WETH  $?  0.00%  -  Percentage  94 days ago
1811 Wrapped BIND  wBIND/WETH  $?  0.00%  -  Percentage  Recently
1812 USDFreeLiquidity  USDFL/USDT  $?  0.00%  -  Percentage  Recently
1813 USDFreeLiquidity  USDFL/DAI  $?  0.00%  -  Percentage  113 hours ago
1814 USDFreeLiquidity  USDFL/USDN  $?  0.00%  -  Percentage  Recently
1815 WETH  WETH/MCX  $?  0.00%  -  Percentage  Recently
1816 Mythic Finance  MYTHIC/WETH  $?  0.00%  -  Percentage  781 hours ago
1817 Polkabase  PBASE/WETH  $?  0.00%  -  Percentage  Recently
1818 WETH  WETH/RAC  $?  0.00%  -  Percentage  Recently
1819 MiraQle  MQL/WETH  $?  0.00%  -  Percentage  68 days ago
1820 MiraQle  MQL/USDT  $?  0.00%  -  Percentage  68 days ago
1821 Parsiq Boost  PRQBOOST/WETH  $?  0.00%  -  Percentage  Recently
1822 WETH  WETH/PUX  $?  0.00%  -  Percentage  Recently
1823 Previse  PRVS/WETH  $?  0.00%  -  Percentage  Recently
1824 SIMBA Storage  SIMBA/USDT  $?  0.00%  -  Percentage  781 hours ago
1825 CryptoPing  PING/USDT  $?  0.00%  -  Percentage  Recently
1826 Wrapped Bitcoin  WBTC/INSTAR  $?  0.00%  -  Percentage  Recently
1827 Vow  VOW/WETH  $?  0.00%  -  Percentage  Recently
1828 Value Set Dollar  VSD/DAI  $?  0.00%  -  Percentage  471 hours ago
1829 Value Set Dollar  VSD/USDT  $?  0.00%  -  Percentage  110 hours ago
1830 Value Set Dollar  VSD/WETH  $?  0.00%  -  Percentage  44 days ago
1831 WETH  WETH/DEGENS  $?  0.00%  -  Percentage  Recently
1832 Xriba  XRA/WETH  $?  0.00%  -  Percentage  630 hours ago
1833 Tower token  TOWER/LYM  $?  0.00%  -  Percentage  469 hours ago
1834 Shadetech  SHD/WETH  $?  0.00%  -  Percentage  Recently
1835 Wrapped Bitcoin  WBTC/DGCL  $?  0.00%  -  Percentage  333 hours ago
1836 Rare Pepe  rPepe/WETH  $?  0.00%  -  Percentage  Recently
1837 xSigma  SIG/USDT  $?  0.00%  -  Percentage  52 days ago
1838 Dollar Protocol  USDf/USDC  $?  0.00%  -  Percentage  156 hours ago
1839 MYFinance  MYFI/WETH  $?  0.00%  -  Percentage  Recently
1840 Delta  DELTA/WETH  $?  0.00%  -  Percentage  Recently
1841 Kambria Yield Tuning Engine  KYTE/WETH  $?  0.00%  -  Percentage  Recently
1842 ClinTex CTi  CTI/WETH  $?  0.00%  -  Percentage  Recently
1843 BasenjiDAO  BSJ/WETH  $?  0.00%  -  Percentage  Recently
1844 EURxb  EURxb/USDT  $?  0.00%  -  Percentage  Recently
1845 Landbox  LAND/WETH  $?  0.00%  -  Percentage  442 hours ago
1846 Folder Protocol  FOL/WETH  $?  0.00%  -  Percentage  Recently
1847 Databroker  DTX/USDT  $?  0.00%  -  Percentage  Recently
1848 STATERA  STA/WSTA  $?  0.00%  -  Percentage  Recently
1849 Delta Exchange Token  DETO/WETH  $?  0.00%  -  Percentage  Recently
1850 Elongate Deluxe  ELongD/WETH  $?  0.00%  -  Percentage  Recently

推荐阅读