![](/img/trans.png)
[英]How to extract a table from website without specifying the web browser in python
[英]Extract user input to python from a table created in browser?
我想在用 python 創建的瀏覽器中創建一個表。 這部分可以通過使用bokeh
庫的DataTable
來完成。 問題是當用戶在表中輸入他/她的輸入時,我想從表中提取數據。 我可以使用任何python庫來做到這一點? 不過,如果我能用散景來做到這一點會更好。
您可以使用BeautifulSoup,它非常適合解析 HTML 內容, 請參閱此示例
如果您的要求是使用 Python 創建一個應用程序並且用戶將通過瀏覽器訪問並將一些數據更新到表格中?
使用 Django 或任何 Web 框架,基本上,您正在嘗試構建一個 Web 應用程序!!
或
如果您正在尋找其他東西,請徹底提及您的要求。
散景中使用的光滑網格數據表可以由用戶直接編輯:
http://docs.bokeh.org/en/latest/docs/reference/models/widgets.tables.html 。
由於數據表的每一列的數據可以對應於 ColumnDataSource 的一個字段,因此可以創建 python 或 javascript 回調,以檢測表中數據值的任何更改。 然后,您可以訪問所需用例的更新數據。
這是在編輯數據時使用 javascript 回調的示例。 編輯數據時,更新的列會打印到瀏覽器控制台。 請注意,它僅在您編輯值然后單擊單元格外后才檢測到更改的數據。
如果您想根據用戶輸入在 python 函數之外運行,您可以對 python 回調執行完全相同的操作。 不過,這確實需要運行散景服務器才能工作。
from datetime import date
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource, CustomJS
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, StringEditor
output_file("data_table.html")
data = dict(
dates=[date(2014, 3, i+1) for i in range(10)],
strings=['edit_this' for i in range(10)],
)
source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="strings", title="Downloads", editor=StringEditor()),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280,
editable=True)
# callback code to detect user edit of table
code = """
data = source.data
console.log('data has been updated!')
console.log(data['strings'])
"""
callback = CustomJS(code=code,args={'source':source})
source.js_on_change('data', callback)
show(widgetbox(data_table))
編輯:
這是一個使用 python 回調的類似示例。 在此示例中,當您編輯單元格時,所有單元格都將被替換。 顯然,您可以隨心所欲,這只是一個說明。
您需要在響應數據更改的源上設置回調。 因此source.on_change('data', update)
。 閱讀更多
https://docs.bokeh.org/en/latest/docs/user_guide/interaction/widgets.html
from datetime import date
from bokeh.io import curdoc
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, StringEditor
data = dict(
dates=[date(2014, 3, i+1) for i in range(10)],
strings=['edit_this' for i in range(10)],
)
source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="strings", title="Downloads", editor=StringEditor()),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280,
editable=True)
# callback code to detect user edit of table
def update(attrname, old, new):
data = source.data
data['strings'] = ['you just edited the table.']*10
source.data = data
source.on_change('data', update)
curdoc().add_root(widgetbox(data_table))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.