【问题标题】:How do I grab the table content from a webpage with javascript using python?如何使用 python 从带有 javascript 的网页中获取表格内容?
【发布时间】:2019-04-09 15:06:30
【问题描述】:

我喜欢从这个page 获取表格内容。以下是我的代码,我得到了 NaN(没有数据)。数字怎么不显示?如何抓取具有相应数据的表格?谢谢。

【问题讨论】:

  • page_source 将为您提供与请求相同的内容,即任何 js 执行之前的 html。

标签: javascript python selenium-webdriver web-scraping


【解决方案1】:

你可以从 api 得到一个不错的 json 格式:

import requests
import pandas as pd

url = 'https://api.blockchain.info/stats'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
params = {'cors': 'true'}

data = requests.get(url, headers=headers, params=params).json()

# if you want it as a table
df = pd.DataFrame(data.items())

选项 2:

让页面完全呈现。有更好的方法将 wait 与 Selenium 一起使用,但很快就会在那里等待 5 秒以显示:

from selenium import webdriver
import pandas as pd
import time

url = 'https://www.blockchain.com/stats'


browser = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
browser.get(url)
time.sleep(5)

dfs = pd.read_html(browser.page_source)
print(dfs[0])

browser.close()

输出:

                    0                   1                   2   3
0         Blocks Mined                 150                 150 NaN
1  Time Between Blocks        9.05 minutes        9.05 minutes NaN
2       Bitcoins Mined  1,875.00000000 BTC  1,875.00000000 BTC NaN

【讨论】:

  • 选项 1:它说 ValueError: DataFrame 构造函数没有正确调用!选项2:如果我们使用wait怎么会显示出来?
  • 选项 1. 你使用的是什么版本的 pandas?
  • 选项 2. 页面是动态的,因此在您将请求发送到 url 后会呈现表格。您只需等待一两秒,该表即可获取数据。
  • 版本 3.7。顺便说一句,我认为我被选项 1 阻止了。它说“ConnectionError: HTTPSConnectionPool(host='api.blockchain.com', port=443): Max retries exceeded with url: /stats?cors=true (Caused by NewConnectionError(' : 建立新连接失败:[Errno 11004] getaddrinfo failed',))"
  • 那是 Python 3.7。我想知道熊猫。这可能是一种可能性。或者您可能被其他方式阻止。我明天再看一遍,但至少 selenium 选项有效。
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 2011-07-15
  • 2020-02-14
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多