【问题标题】:Need help scraping a web-page需要帮助抓取网页
【发布时间】:2022-01-15 05:13:54
【问题描述】:

我开始了一个迷你项目,我想检索第一页上前 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))

【问题讨论】:

    标签: python html selenium-webdriver web-scraping


    【解决方案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
    

    【讨论】:

    • 哇,感谢您的意见。至于市值,我将如何获得正确的位置?我以为右键单击 -> 复制 -> 复制 xpath 可以解决问题,但我什么也没得到。
    • 让我看看
    • 非常感谢@Abhishek Rai。我一直在挣扎:)
    • 我忘了问你,外循环在这种情况下是做什么的?我可以看到 i 没有被使用,22 指的是什么?
    • @Dfhaa_DK 它滚动页面。它将滚动页面 22 次。所以,这些元素可以进入视野。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多