需要帮助抓取网页

时间:2020-12-20 11:49:18

标签: python html selenium-webdriver web-scraping

我开始了一个小项目,我想在第一页上检索硬币名称、价格、硬币市值、流通供应量和前 100 个硬币的数量。到现在为止,(在问了几个问题并获得了很好的输入之后)我能够检索第一页上的所有硬币名称。但是,对于价格,我只得到前 11 个名称,而代币市值我一无所获。我真的很想收集数据,这样我就可以开始做一些数据分析,但我总是碰壁。有人可以进一步指出我正确的方向吗?我知道有一个 api,但我想扩展我的知识。

import requests
from lxml import html
from selenium import webdriver

url = "https://coinmarketcap.com/"

driver = webdriver.Chrome()

driver.get(url)

coin_name = [name.text for name in driver.find_elements_by_xpath('//td[3]/a[@class="cmc-link" and starts-with(@href, "/currencies/")]')]
print(coin_name)
print(len(coin_name))
price = [p.text for p in driver.find_elements_by_xpath('//td[4]/div/a[@class = "cmc-link" and contains(@href, "/markets/")]')]
print(price)
print(len(price))

market_cap = [m.text for m in driver.find_elements_by_xpath('//p[@class = "cmc-link" and contains(@style, "white-space:nowrap")]//p[@color="text"]')]

print(len(market_cap))

1 个答案:

答案 0 :(得分:1)

您需要将元素滚动到视图中。继续向下发送一个页面。

import time

import requests
from lxml import html
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = "https://coinmarketcap.com/"

driver = webdriver.Chrome(executable_path='C:/chromedriver.exe')

driver.get(url)
driver.maximize_window()
for i in range(22):
    coin_name = driver.find_elements_by_xpath('//td[3]/a[@class="cmc-link" and starts-with(@href, "/currencies/")]')

    prices = driver.find_elements_by_xpath('//td[4]/div/a[@class = "cmc-link" and contains(@href, "/markets/")]')

    market_caps = driver.find_elements_by_xpath('//p[@class="sc-1eb5slv-0 kDEzev"]')
    
    html = driver.find_element_by_tag_name('html')
    html.send_keys(Keys.PAGE_DOWN)
    for coin, price, cap in zip(coin_name, prices, market_caps):
        print("Coin :", coin.text, "Price :", price.text, "Market_caps:", cap.text)

输出:-

CETH Price : $648.10 Market cap : $435,982,385,626
Coin : XRP
XRP Price : $0.573805 Market cap : $73,825,115,056
Coin : Tether
USDT Price : $1.00 Market cap : $26,053,047,457
Coin : Litecoin
LTC Price : $117.47 Market cap : $20,302,149,320
Coin : Bitcoin Cash
BCH Price : $350.85 Market cap : $7,768,463,654
Coin : Chainlink
LINK Price : $13.34 Market cap : $6,526,170,500
Coin : Cardano
ADA Price : $0.163470 Market cap : $5,300,831,845
Coin : Binance Coin
BNB Price : $34.82 Market cap : $5,085,969,556
Coin : Polkadot
DOT Price : $5.25 Market cap : $5,027,979,819
Coin : Stellar
XLM Price : $0.178429 Market cap : $4,683,566,948