python - 网页抓取不适用于 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)
解决方案
第一个页面的内容是由 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