在 Python 中抓取 table 数据
Webscraping table data in Python
我想使用网络抓取从网站获取数据,但在 to_html
中出现错误
import requests
import pandas as pd
url=
'https://www.nseindia.com/live_market/dynaContent/live_watch/equities_stock_watch.htm'
html = requests.get(url).content
df_list = pd.read_html(html)
df = df_list.to_html(html)
print (df)
df.to_csv('my data.csv')
错误:
AttributeError Traceback (most recent call last)
<ipython-input-35-61d14e08ca97> in <module>()
5 html = requests.get(url).content
6 df_list = pd.read_html(html)
----> 7 df = df_list.to_html(html)
8 print (df)
9 df.to_csv('my data.csv')
AttributeError: 'list' object has no attribute 'to_html'
我相信需要 select 通过索引获取 DataFrame 列表的第一个值:
df = df_list[0]
print (df)
0
0 No Data.
df.to_csv('my data.csv', index=False)
详情:
df_list = pd.read_html(html)
print (df_list)
[ 0
0 No Data.]
尝试以下操作:
pip install lxml
pip install html5lib
pip install BeautifulSoup4
现在您不需要导入请求。
import pandas as pd
import html5lib
table=pd.read_html('https://www.nseindia.com/live_market/dynaContent/live_watch/equities_stock_watch.htm')
此外,如果您打算从国家证券交易所抓取股票数据,您可以使用 NSEpy,这是一个简单的 API 来获取印度公司的股票数据。
您收到 AttributeError 是因为 pd.read_html() returns 数据帧列表和列表没有属性 'to_html'
来到解决方案,
您提到的页面是使用 javascript 呈现的。 BeautifulSoup 无法从 javascript.
呈现的页面中抓取数据
要访问 Javascript 呈现的页面,您需要使用成熟的呈现引擎。您可以使用 selenium 或 phantomJS 来获取 javascript 数据。
尝试以下...
# !pip install webdriver-manager
import numpy as np
import requests
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
DRIVER_PATH = '/path/to/chromedriver'
url= 'https://www1.nseindia.com/live_market/dynaContent/live_watch/equities_stock_watch.htm'
options = Options()
options.headless = False
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.set_page_load_timeout(5)
try:
driver.get(url)
except:
pass
src= driver.page_source
driver.quit()
soup= bs(src, 'lxml')
table= soup.find_all('table')
table= pd.read_html(str(table[1]),header=0)[0].set_index('Symbol')
table
我想使用网络抓取从网站获取数据,但在 to_html
中出现错误import requests
import pandas as pd
url=
'https://www.nseindia.com/live_market/dynaContent/live_watch/equities_stock_watch.htm'
html = requests.get(url).content
df_list = pd.read_html(html)
df = df_list.to_html(html)
print (df)
df.to_csv('my data.csv')
错误:
AttributeError Traceback (most recent call last)
<ipython-input-35-61d14e08ca97> in <module>()
5 html = requests.get(url).content
6 df_list = pd.read_html(html)
----> 7 df = df_list.to_html(html)
8 print (df)
9 df.to_csv('my data.csv')
AttributeError: 'list' object has no attribute 'to_html'
我相信需要 select 通过索引获取 DataFrame 列表的第一个值:
df = df_list[0]
print (df)
0
0 No Data.
df.to_csv('my data.csv', index=False)
详情:
df_list = pd.read_html(html)
print (df_list)
[ 0
0 No Data.]
尝试以下操作:
pip install lxml
pip install html5lib
pip install BeautifulSoup4
现在您不需要导入请求。
import pandas as pd
import html5lib
table=pd.read_html('https://www.nseindia.com/live_market/dynaContent/live_watch/equities_stock_watch.htm')
此外,如果您打算从国家证券交易所抓取股票数据,您可以使用 NSEpy,这是一个简单的 API 来获取印度公司的股票数据。
您收到 AttributeError 是因为 pd.read_html() returns 数据帧列表和列表没有属性 'to_html'
来到解决方案, 您提到的页面是使用 javascript 呈现的。 BeautifulSoup 无法从 javascript.
呈现的页面中抓取数据要访问 Javascript 呈现的页面,您需要使用成熟的呈现引擎。您可以使用 selenium 或 phantomJS 来获取 javascript 数据。
尝试以下...
# !pip install webdriver-manager
import numpy as np
import requests
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
DRIVER_PATH = '/path/to/chromedriver'
url= 'https://www1.nseindia.com/live_market/dynaContent/live_watch/equities_stock_watch.htm'
options = Options()
options.headless = False
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.set_page_load_timeout(5)
try:
driver.get(url)
except:
pass
src= driver.page_source
driver.quit()
soup= bs(src, 'lxml')
table= soup.find_all('table')
table= pd.read_html(str(table[1]),header=0)[0].set_index('Symbol')
table