python調用html
『壹』 請問如何用python打開一個html文件
importwx.html2
classBrower(wx.Frame):
def__init__(self):
wx.Frame.__init__(self,None,-1,"BROWER",size=(-1,-1))
self.browser=wx.html2.WebView.New(self,style=0,size=(-1,-1))
self.html_file="test.html"
self.browser.LoadURL(os.path.realpath("test.html"))
『貳』 html中調用python腳本
最常用的是用jquery的ajax功能是:
function serialGen(){
var Pattern = document.getElementById("pattern");
//用get方式將Pattern的值傳到伺服器上, 當然也可以使用post
$.get('ajax/test.html?patern=' + Pattern.value, function(data) {
document.forms[1].elements["pep"].value = data;
});
}
『叄』 在Python中使用HTML模版的教程
這篇文章主要介紹了在Python中使用HTML模版的教程,HTML模版也是Python的各大框架下的一個基本功能,需要的朋友可以參考下。Web框架把我們從WSGI中拯救出來了。現在,我們只需要不斷地編寫函數,帶上URL,就可以繼續Web App的開發了。
但是,Web App不僅僅是處理邏輯,展示給用戶的頁面也非常重要。在函數中返回一個包含HTML的字元串,簡單的頁面還可以,但是,想想新浪首頁的6000多行的HTML,你確信能在Python的字元串中正確地寫出來么?反正我是做不到。
俗話說得好,不懂前端的Python工程師不是好的產品經理。有Web開發經驗的同學都明白,Web App最復雜的部分就在HTML頁面。HTML不僅要正確,還要通過CSS美化,再加上復雜的JavaScript腳本來實現各種交互和動畫效果。總之,生成HTML頁面的難度很大。
由於在Python代碼里拼字元串是不現實的,所以,模板技術出現了。
使用模板,我們需要預先准備一個HTML文檔,這個HTML文檔不是普通芹腔的HTML,而是嵌入了一些變數和指令,然後,根據我們傳入的數據,替換後嫌嫌衫,得到最終的HTML,發送給用戶:
這就是傳說中的MVC:Model-View-Controller,中文名「模型-視圖-控制器」。
Python處理URL的函數就是C:Controller,Controller負責業務邏輯,比如檢查用戶名是否存在,取出用戶信息等等;
包含變數{{ name }}的模板就是V:View,View負責顯示邏者枝輯,通過簡單地替換一些變數,View最終輸出的就是用戶看到的HTML。
MVC中的Model在哪?Model是用來傳給View的,這樣View在替換變數的時候,就可以從Model中取出相應的數據。
上面的例子中,Model就是一個dict:
{ name: Michael }
只是因為Python支持關鍵字參數,很多Web框架允許傳入關鍵字參數,然後,在框架內部組裝出一個dict作為Model。
現在,我們把上次直接輸出字元串作為HTML的例子用高端大氣上檔次的MVC模式改寫一下:
16
17
18
19
20
21
22
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route(/, methods=[GET, POST])
def home():
return render_template(home.html)
@app.route(/signin, methods=[GET])
def signin_form():
return render_template(form.html)
@app.route(/signin, methods=[POST])
def signin():
username = request.form[username]
password = request.form[password]
if username==admin and password==password:
return render_template(signin-ok.html, username=username)
return render_template(form.html, message=Bad username or password, username=username)
if __name__ == __main__:
app.run()
Flask通過render_template()函數來實現模板的渲染。和Web框架類似,Python的模板也有很多種。Flask默認支持的模板是jinja2,所以我們先直接安裝jinja2:
?
1
$ easy_install jinja2
然後,開始編寫jinja2模板:
?
1
home.html
用來顯示首頁的模板:
11
html
head
titleHome/title
/head
body
h1 style=font-style:italicHome/h1
/body
/html
form.html
用來顯示登錄表單的模板:
16
17
18
html
head
titlePlease Sign In/title
/head
body
{% if message %}
p style=color:red{{ message }}/p
{% endif %}
form action=/signin method=post
legendPlease sign in:/legend
pinput name=username placeholder=Username value={{ username }}/p
pinput name=password placeholder=Password type=password/p
pbutton type=submitSign In/button/p
/form
/body
/html
signin-ok.html
登錄成功的模板:
?
7
8
html
head
titleWelcome, {{ username }}/title
/head
body
pWelcome, {{ username }}!/p
/body
/html
登錄失敗的模板呢?我們在form.html中加了一點條件判斷,把form.html重用為登錄失敗的模板。
最後,一定要把模板放到正確的templates目錄下,templates和app.py在同級目錄下:
啟動python app.py,看看使用模板的頁面效果:
通過MVC,我們在Python代碼中處理M:Model和C:Controller,而V:View是通過模板處理的,這樣,我們就成功地把Python代碼和HTML代碼最大限度地分離了。
使用模板的另一大好處是,模板改起來很方便,而且,改完保存後,刷新瀏覽器就能看到最新的效果,這對於調試HTML、CSS和JavaScript的前端工程師來說實在是太重要了。
在Jinja2模板中,我們用{{ name }}表示一個需要替換的變數。很多時候,還需要循環、條件判斷等指令語句,在Jinja2中,用{% ... %}表示指令。
比如循環輸出頁碼:
?
1
2
3
{% for i in page_list %}
a href=/page/{{ i }}{{ i }}/a
{% endfor %}
如果page_list是一個list:[1, 2, 3, 4, 5],上面的模板將輸出5個超鏈接。
除了Jinja2,常見的模板還有:
Mako:用和${xxx}的一個模板;
Cheetah:也是用和${xxx}的一個模板;
Django:Django是一站式框架,內置一個用{% ... %}和{{ xxx }}的模板。
小結
有了MVC,我們就分離了Python代碼和HTML代碼。HTML代碼全部放到模板里,寫起來更有效率。
『肆』 Python實現簡單HTML表格解析
本文實例講述了Python實現簡單HTML表格解析的方法。分享給大家供段余檔大家參考。握亂具體分析如下:
這里依賴libxml2dom,確保首先安裝!導入到你的腳毀謹步並調用parse_tables() 函數。
1. source = a string containing the source code you can pass in just the table or the entire page code
2. headers = a list of ints OR a list of strings
If the headers are ints this is for tables with no header, just list the 0 based index of the rows in which you want to extract data.
If the headers are strings this is for tables with header columns (with the tags) it will pull the information from the specified columns
3. The 0 based index of the table in the source code. If there are multiple tables and the table you want to parse is the third table in the code then pass in the number 2 here
It will return a list of lists. each inner list will contain the parsed information.
具體代碼如下:
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118#The goal of table parser is to get specific information from specific
#columns in a table.
#Input: source code from a typical website
#Arguments: a list of headers the user wants to return
#Output: A list of lists of the data in each row
import libxml2dom
def parse_tables(source, headers, table_index):
parse_tables(string source, list headers, table_index)
headers may be a list of strings if the table has headers defined or
headers may be a list of ints if no headers defined this will get data
from the rows index.
This method returns a list of lists
#Determine if the headers list is strings or ints and make sure they
#are all the same type
j = 0
print Printing headers: ,headers
#route to the correct function
#if the header type is int
if type(headers[0]) == type(1):
#run no_header function
return no_header(source, headers, table_index)
#if the header type is string
elif type(headers[0]) == type(a):
#run the header_given function
return header_given(source, headers, table_index)
else:
#return none if the headers arent correct
return None
#This function takes in the source code of the whole page a string list of
#headers and the index number of the table on the page. It returns a list of
#lists with the scraped information
def header_given(source, headers, table_index):
#initiate a list to hole the return list
return_list = []
#initiate a list to hold the index numbers of the data in the rows
header_index = []
#get a document object out of the source code
doc = libxml2dom.parseString(source,html=1)
#get the tables from the document
tables = doc.getElementsByTagName(table)
try:
#try to get focue on the desired table
main_table = tables[table_index]
except:
#if the table doesnt exits then return an error
return [The table index was not found]
#get a list of headers in the table
table_headers = main_table.getElementsByTagName(th)
#need a sentry value for the header loop
loop_sentry = 0
#loop through each header looking for matches
for header in table_headers:
#if the header is in the desired headers list
if header.textContent in headers:
#add it to the header_index
header_index.append(loop_sentry)
#add one to the loop_sentry
loop_sentry+=1
#get the rows from the table
rows = main_table.getElementsByTagName(tr)
#sentry value detecting if the first row is being viewed
row_sentry = 0
#loop through the rows in the table, skipping the first row
for row in rows:
#if row_sentry is 0 this is our first row
if row_sentry == 0:
#make the row_sentry not 0
row_sentry = 1337
continue
#get all cells from the current row
cells = row.getElementsByTagName(td)
#initiate a list to append into the return_list
cell_list = []
#iterate through all of the header indexs
for i in header_index:
#append the cells text content to the cell_list
cell_list.append(cells[i].textContent)
#append the cell_list to the return_list
return_list.append(cell_list)
#return the return_list
return return_list
#This function takes in the source code of the whole page an int list of
#headers indicating the index number of the needed item and the index number
#of the table on the page. It returns a list of lists with the scraped info
def no_header(source, headers, table_index):
#initiate a list to hold the return list
return_list = []
#get a document object out of the source code
doc = libxml2dom.parseString(source, html=1)
#get the tables from document
tables = doc.getElementsByTagName(table)
try:
#Try to get focus on the desired table
main_table = tables[table_index]
except:
#if the table doesnt exits then return an error
return [The table index was not found]
#get all of the rows out of the main_table
rows = main_table.getElementsByTagName(tr)
#loop through each row
for row in rows:
#get all cells from the current row
cells = row.getElementsByTagName(td)
#initiate a list to append into the return_list
cell_list = []
#loop through the list of desired headers
for i in headers:
try:
#try to add text from the cell into the cell_list
cell_list.append(cells[i].textContent)
except:
#if there is an error usually an index error just continue
continue
#append the data scraped into the return_list
return_list.append(cell_list)
#return the return list
return return_list
希望本文所述對大家的Python程序設計有所幫助。
『伍』 如何用Python爬取出HTML指定標簽內的文本
你好!
可以通過lxml來獲取指定標簽的內容。
#安裝lxml
pipinstalllxml
importrequests
fromlxmlimporthtml
defgetHTMLText(url):
....
etree=html.etree
root=etree.HTML(getHTMLText(url))
#這里得到一個表格內tr的集合
trArr=root.xpath("//div[@class='news-text']/table/tbody/tr");
#循環顯示tr裡面的內容
fortrintrArr:
rank=tr.xpath("./td[1]/text()")[0]
name=tr.xpath("./td[2]/div/text()")[0]
prov=tr.xpath("./td[3]/text()")[0]
strLen=22-len(name.encode('GBK'))+len(name)
print('排名:{:<3},學校名稱:{:<{}} ,省份:{}'.format(rank,name,strLen,prov))
希望對你有幫助!
『陸』 Python html 模塊簡介
比如:
比如,數學符號 , ,可以直接獲得:
escape 將特殊字元 & , < 和 > 替換為HTML安全序列。如果可選的 flags quote 為 True (默認值),則還會翻譯引號字元,包括雙引號( " )和單引號( ' )字元。
將字元串 s 中的所有命名和數字字元引用 (例如 > , > , > ) 轉換為相應的 Unicode 字元。此函數使用 HTML 5 標准為有效和無效字元引用定義的規則,以及 HTML 5 命名字元引用列表 。
這個模塊定義了一個 HTMLParser 類,為 HTML(超文本標記語言)和 XHTML 文本文件解析提供基礎。
class html.parser.HTMLParser(*, convert_charrefs=True) 創建一個能解析無效標記的解析器實例。查找標簽(tags)和其他標記(markup)並調用 handler 函數。
用法:
通過調用 self.handle_starttag 處理開始標簽,或通過調用 self.handle_startendtag 處理結束標簽。標簽之間的數據通過以 data 為參數調用 self.handle_data 從解析器傳遞到派生類(數據可以分成任意塊)。如果 convert_charrefs 為 True ,則將字元引用自動轉換為相應的 Unicode 字元(並且 self.handle_data 不再拆分成塊),否則通過調用帶有字元串的 self.handle_entityref 或 self.handle_charref 來傳遞它們以分別包含命名或數字引用作為參數。如果 convert_charrefs 為 True (默認值),則所有字元引用( script / style 元素中的除外)都會自動轉換為相應的 Unicode 字元。
一個 HTMLParser 類的實例用來接受 HTML 數據,並在標記開始、標記結束、文本、注釋和其他元素標記出現的時候調用對應的方法。要實現具體的行為,請使用 HTMLParser 的子類並重載其方法。
這個解析器不檢查結束標記是否與開始標記匹配,也不會因外層元素完畢而隱式關閉了的元素引發結束標記處理。
下面是簡單的 HTML 解析器的一個基本示例,使用 HTMLParser 類,當遇到開始標記、結束標記以及數據的時候將內容列印出來。
輸出:
HTMLParser.reset() 重置實例。丟失所有未處理的數據。在實例化階段被隱式調用。
HTMLParser.feed(data) 填充一些文本到解析器中。如果包含完整的元素,則被處理;如果數據不完整,將被緩沖直到更多的數據被填充,或者 close() 被調用。 data 必須為 str 類型。
HTMLParser.close() 如同後面跟著一個文件結束標記一樣,強制處理所有緩沖數據。這個方法能被派生類重新定義,用於在輸入的末尾定義附加處理,但是重定義的版本應當始終調用基類 HTMLParser 的 close() 方法。
HTMLParser.getpos() 返回當前行號和偏移值。
HTMLParser.get_starttag_text() 返回最近打開的開始標記中的文本。結構化處理時通常應該不需要這個,但在處理「已部署」的 HTML 或是在以最小改變來重新生成輸入時可能會有用處(例如可以保留屬性間的空格等)。
下列方法將在遇到數據或者標記元素的時候被調用。他們需要在子類中重載。基類的實現中沒有任何實際操作(除了 handle_startendtag() ):
HTMLParser.handle_starttag 這個方法在標簽開始的時候被調用(例如: <div id="main"> )。 tag 參數是小寫的標簽名。 attrs 參數是一個 (name, value) 形式的列表,包含了所有在標記的 <> 括弧中找到的屬性。 name 轉換為小寫, value 的引號被去除,字元和實體引用都會被替換。比如,對於標簽 <a href="https://www.cwi.nl/"> ,這個方法將以下列形式被調用 handle_starttag('a', [('href', 'https://www.cwi.nl/')]) 。 html.entities 中的所有實體引用,會被替換為屬性值。
HTMLParser.handle_endtag(tag) 此方法被用來處理元素的結束標記(例如: </div> )。 tag 參數是小寫的標簽名。
HTMLParser.handle_startendtag(tag, attrs) 類似於 handle_starttag() , 只是在解析器遇到 XHTML 樣式的空標記時被調用( <tag ... /> )。這個方法能被需要這種特殊詞法信息的子類重載;默認實現僅簡單調用 handle_starttag() 和 handle_endtag() 。
HTMLParser.handle_data(data) 這個方法被用來處理任意數據(例如:文本節點和 <script>...</script> 以及 <style>...</style> 中的內容)。
HTMLParser.handle_entityref(name) 這個方法被用於處理 &name; 形式的命名字元引用(例如 > ),其中 name 是通用的實體引用(例如: 'gt' )。如果 convert_charrefs 為 True,該方法永遠不會被調用。
HTMLParser.handle_charref(name) 這個方法被用來處理 NNN; 和 NNN; 形式的十進制和十六進制字元引用。例如, > 等效的十進制形式為 > ,而十六進制形式為 > ;在這種情況下,方法將收到 '62' 或 'x3E' 。如果 convert_charrefs 為 True ,則該方法永遠不會被調用。
HTMLParser.handle_comment(data) 這個方法在遇到注釋的時候被調用(例如: )。例如, 這個注釋會用 ' comment ' 作為參數調用此方法。
Internet Explorer 條件注釋(condcoms)的內容也被發送到這個方法,因此,對於 ``,這個方法將接收到 '[if IE 9]>IE9-specific content<![endif]' 。
HTMLParser.handle_decl(decl) 這個方法用來處理 HTML doctype 申明(例如 <!DOCTYPE html> )。 decl 形參為 <!...> 標記中的所有內容(例如: 'DOCTYPE html' )。
HTMLParser.handle_pi(data) 此方法在遇到處理指令的時候被調用。 data 形參將包含整個處理指令。例如,對於處理指令 <?proc color='red'> ,這個方法將以 handle_pi("proc color='red'") 形式被調用。它旨在被派生類重載;基類實現中無任何實際操作。
註解: HTMLParser 類使用 SGML 語法規則處理指令。使用 '?' 結尾的 XHTML 處理指令將導致 '?' 包含在 data 中。
HTMLParser.unknown_decl(data) 當解析器讀到無法識別的聲明時,此方法被調用。 data 形參為 <![...]> 標記中的所有內容。某些時候對派生類的重載很有用。基類實現中無任何實際操作。
因此,我們可以如此定義:
下面介紹如何解析 HTML 文檔。
解析一個文檔類型聲明:
解析一個具有一些屬性和標題的元素:
script 和 style 元素中的內容原樣返回,無需進一步解析:
解析注釋:
解析命名或數字形式的字元引用,並把他們轉換到正確的字元(注意:這 3 種轉義都是 '>' ):
填充不完整的塊給 feed() 執行, handle_data() 可能會多次調用(除非 convert_charrefs 被設置為 True ):
解析無效的 HTML (例如:未引用的屬性)也能正常運行:
『柒』 Python調用BeautifuSoup進行html的文本內容提取問題 [
1.python代碼是解釋性代碼,即不需要編譯,直接就可以通過python解析器,去一點點解釋翻譯,直接運行的。所以,你說的「編譯」就是不確切的說法。
2.UnicodeEncodeError的錯誤原因在於:
你在輸出Unicode字元時,保存為默認的,ascii編碼的字元串時,ascii字元集中沒有包含對應的,十有八九是中文的字元,所以報錯了。
先不說解決辦法,因為從你的此處代碼來看,從頭到尾,都是不妥當的。
3.另外,你對返回的html代碼,調用BeautifulSoup時,沒有指定對應的字孫飢符編碼類型。也是不妥當的做法。
4.總的來說,還仔碼是那句,不論是本意是:
(1)獲得對應的html代碼,另存為對應的文件
還是
(2)想要實現下載某個url地址(對應的)文件
你的代碼,都是邏輯上就很不明確的。
解決辦法:
(1)獲得對應的html代碼,另存為對應的文件
想了下,還是懶得貼我的全部的代碼了。
太麻煩了。
針對你自己的代碼,你自己去把:
A。
op = open(filename,"wb")
改為
op = codecs.open(filename,"a+", "UTF-8")
B .
soup= BeautifulSoup(html)
改為:
soup= BeautifulSoup(html, from_encoding="xxx")
其中xxx是你所要打開的網則戚返頁的編碼類型,常見的有utf-8,gbk等。
是因url不同而不同的。
詳情自己參考我寫的:
【整理】關於HTML網頁源碼的字元編碼(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解釋
(2)想要實現下載某個url地址(對應的)文件
參考我的,之前就實現好的函數:
crifanLib.py downloadFile
(這里不給貼地址,請自己用google搜標題,即可找到帖子地址)
『捌』 python 怎麼提取html內容啊(正則)
python提取html內容的方法。如下參考:
1.首先,打開Python來定義字元串,在定義的字元串後面加上中括弧,然後在要提取的字元位置輸入。
『玖』 Python如何運行HTML程序
肯定是可以,寫一個瀏覽器都沒有問題。
不過正常情況不會去做,費神費力,通常嵌入瀏覽器插件就可以,比如qt。
『拾』 怎樣用Python寫一個Html的簡單網頁
1、打開sublime text 3,新建一個PY文件。