首页 > 解决方案 > 网页抓取不适用于 BeautfiulSoup

问题描述

提前:对不起,任何错误的格式,这是我的第一篇文章!

我正在尝试创建一个程序来抓取“CoinMarketCap”并比较南非交易所(Luno)和所有其他比特币交易所的价格。

可悲的是,它不适用于https://coinmarketcap.com/de/currencies/bitcoin/markets/页面。不过,它适用于https://coinmarketcap.com/de/exchanges/luno/页面。

有什么建议么?这是我的代码:

from bs4 import BeautifulSoup 
import requests
from time import sleep
from random import randint

def scrapeWebsite(link):
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

    results = requests.get(link, headers=headers)

    src = results.content

    soup = BeautifulSoup(src,features="html.parser")

    items = []

    print(soup.prettify())

    for tr in soup.find_all("tr"):
        line = ""
        for td in tr.find_all("td"):
            line = line + td.text + "/"
            if(td.text == "Kürzlich"):
                items.append(line)
    return items



itemsLuno = scrapeWebsite("https://coinmarketcap.com/de/currencies/bitcoin/markets/")

#Coins on Luno are: Bitcoin, Ethereum, Litecoin and ripple

for item in itemsLuno:
        print(item)

标签: pythonhtmlwindowsbeautifulsoupcryptography

解决方案


第一个页面的内容是由 javascript 生成的,因此当您获取页面时,您会获取初始的、未修改的 html。您在浏览器中执行 js 之前从服务器获取响应。 如果您需要在抓取页面之前呈现 javascript 内容,请在此处检查此响应。
你可以使用 scrapy 框架或 selenium 来做到这一点,例如 selenium

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(url)
time.sleep(5)
html = driver.page_source

推荐阅读