家好,請允許我做一個尷尬而又不失禮貌的微笑^_^,今天小編就來盤點一下當下主流的html 5 開發工具。
小編引用一下他們的slogan:飛速編碼的極客工具,手指爽,眼睛爽。
小編先好好介紹一下它:
內置emmet:tab一下生成一串代碼
無死角提示:除了語法,還能提示ID、Class、圖片、鏈接、字體
多語言支持:php、jsp、ruby、python、nodejs等web語言,less、coffee等編譯型語言均支持
實時預覽,一邊敲一邊看
超級全的與法庫
轉到定義和一鍵搜索
小伙伴們,這是一個在線工具,但是功能的確很強大并且還簡單。隨意設計和發布,所見即所得,不用編碼。有沒有很方便呢?
將工程保存到云端,隨時隨地訪問,真的不要再方便。
WebStorm 是jetbrains公司旗下一款JavaScript 開發工具。目前已經被廣大中國JS開發者譽為“Web前端開發神器”、“最強大的HTML5編輯器”、“最智能的JavaScript IDE”等。
特點:
智能的代碼補全
代碼格式化
html提示
聯想查詢
代碼重構
代碼檢查和快速修復
代碼調試
代碼結構瀏覽
代碼折疊
包裹或者去掉外圍代碼
Sencha Architect 2是個可視化的應用構建器,它使用Sencha Touch 2來構建移動應用,使用ExtJS 4來構建桌面應用。
特點:
1、通過拖拽組件來創建富用戶界面并連接到后端的數據源。
2、支持通過Sencha Touch 2來構建移動Web應用以及通過Ext JS 4來構建桌面Web應用。其提供的代碼編輯功能可以在Sencha Architect中創建整個應用。
3、支持模型--視圖--控制器模式。內置的針對iOS與Android的一鍵式原生打包功能。
Adobe Edge是adobe公司的一款新型網頁互動工具。
Adobe Edge的目的是幫助專業設計師制作網頁動畫乃至簡單游戲。該工具的重點放在動畫引擎上,但adobe承諾將增加更多HTML5功能,比如Canvas、HTML5音頻/視頻標簽等。支持Android、iOS、webOS、黑莓PlayBook、Firefox、Chrome、Safari和IE9等各個平臺。Adobe于2014年正式推出Adobe Edge AnimateCC集成了hml5、js、css的開發工具。
Adobe對于我們來講,真的再熟悉不過了。
有人說,Edge是不是要代替flash,哦,不。Edge只是為網頁設計人員提供了一種工具,幫助他們在不支持Flash的設備(比如蘋果iOS設備)上制作網絡動畫。
Ps:如今的flash,不用怕被誰代替,因為它會慢慢成為歷史。
這款神一樣的軟件,小編就不做介紹啦。
VSCode 好多小伙伴在評論區推薦,小便漏掉了,現在補上。
Microsoft在2015年4月30日Build 開發者大會上正式宣布了 Visual Studio Code 項目:一個運行于 Mac OS X、Windows和 Linux 之上的,針對于編寫現代 Web 和云應用的跨平臺源代碼編輯器。
Sublime Text 是一個代碼編輯器(Sublime Text 2是收費軟件,但可以無限期試用),也是HTML和散文先進的文本編輯器。Sublime Text是由程序員Jon Skinner于2008年1月份所開發出來,它最初被設計為一個具有豐富擴展功能的Vim。
Sublime Text具有漂亮的用戶界面和強大的功能,例如代碼縮略圖,Python的插件,代碼段等。還可自定義鍵綁定,菜單和工具欄。Sublime Text 的主要功能包括:拼寫檢查,書簽,完整的 Python API , Goto 功能,即時項目切換,多選擇,多窗口等等。Sublime Text 是一個跨平臺的編輯器,同時支持Windows、Linux、Mac OS X等操作系統。
快在留言區告訴小編,你都在用什么軟件開發HTML5呢?一起交流學習吧!
Beautifulsoup模塊介紹
Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間.你可能在尋找 Beautiful Soup3 的文檔,Beautiful Soup 3 目前已經停止開發,官網推薦在現在的項目中使用Beautiful Soup 4, 移植到BS4
入門Python其實很容易,但是我們要去堅持學習,每一天堅持很困難,我相信很多人學了一個星期就放棄了,為什么呢?其實沒有好的學習資料給你去學習,你們是很難堅持的,這是小編收集的Python入門學習資料關注,轉發,私信小編“01”,即可免費領取!希望對你們有幫助
#安裝 Beautiful Soup
pip install beautifulsoup4
#安裝解析器
Beautiful Soup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,其中一個是 lxml .根據操作系統不同,可以選擇下列方法來安裝lxml:
$ apt-get install Python-lxml
$ easy_install lxml
$ pip install lxml
另一個可供選擇的解析器是純Python實現的 html5lib , html5lib的解析方式與瀏覽器相同,可以選擇下列方法來安裝html5lib:
$ apt-get install Python-html5lib
$ easy_install html5lib
$ pip install html5lib
中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
注意:
'''
注意: 使用bs4,必須先選擇 “解析器”
'''
from bs4 import BeautifulSoup
# markup="": 傳入解析文本
# BeautifulSoup('解析文本內容', '解析器')
# python自帶的解析器 html.parser
# BeautifulSoup('<a>蔡徐坤打籃球真厲害,還會唱歌,跳舞,Rap!!!!</a>', 'html.parser')
# lxml: pip3 install lxml 第三方的解析庫(推薦使用)
# soup = BeautifulSoup('<a>蔡徐坤打籃球真厲害,還會唱歌,跳舞,Rap!!!!</a>', 'lxml')
# print(soup)
# print(type(soup))
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a id="tank" href="http://example.com/tank">蔡徐坤打籃球真厲害,還會唱歌,跳舞,Rap!!!!</a>
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
#基本使用:容錯處理,文檔的容錯能力指的是在html代碼不完整的情況下,使用該模塊可以識別該錯誤。使用BeautifulSoup解析上述代碼,能夠得到一個 BeautifulSoup 的對象,并能按照標準的縮進格式的結構輸出
soup = BeautifulSoup(html_doc, 'lxml')
print(soup)
# html文本美化 了解
print(soup.prettify())
遍歷文檔樹:即直接通過標簽名字選擇,特點是選擇速度快,但如果存在多個相同的標簽則只返回第一個
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a id="cxk" href="http://example.com/cxk">蔡徐坤打籃球真厲害,還會唱歌,跳舞,Rap!!!!</a>
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'lxml')
# 基本用法
# 1、直接.標簽名 (*******)
print(soup)
print(soup.head)
print(soup.a) # 返回第一個a標簽
# 2、獲取標簽的名稱 了解
print(soup.p.name)
# 3、獲取標簽的屬性 (*********)
print(soup.a.attrs) # 第一個a標簽的所有屬性
print(type(soup.a.attrs)) # 返回所有標簽屬性的類型 dict
print(soup.a.attrs.get('id')) # dict類型可以get取值
print(soup.a.attrs.get('href'))
# 4、獲取標簽的文本內容
# 獲取第一個a標簽中的文本內容
print(soup.a.text)
# 5、嵌套選擇
# xml
'''
<info> # 父標簽
<name>cxk</name>
<gf>劉亦菲</gf>
</info>
'''
print(soup.prettify())
print(type(soup.html)) # 可以嵌套選擇。
print(type(soup.html.head.title))
print(soup.html.head.title)
# 6、子節點、子孫節點
print(soup) # 注意: 換行符也算一個 節點
print(soup.body.contents) # body下所有子節點,返回的是一個列表
print(len(soup.body.contents)) # body下所有子節點
# 優先使用children
print(soup.body.children) # 得到一個迭代器,包含p下所有子節點
print(list(soup.body.children)) # 得到一個迭代器,包含p下所有子節點
for children in soup.body.children:
print(children)
# 7、父節點、祖先節點
# print(soup)
# print(soup.a.parent) # 獲取a標簽的父節點
print(soup.a.parents) # 找到a標簽所有的祖先節點,父親的父親,父親的父親的父親... 它也是一個迭代器
print(list(soup.a.parents)) # 找到a標簽所有的祖先節點,父親的父親,父親的父親的父親...
print(len(list(soup.a.parents))) # 4
# 8、兄弟節點
# print(soup)
# print('=====>')
print(soup.a.next_sibling) # 下一個兄弟
print(soup.a.previous_sibling) # 上一個兄弟
print(list(soup.a.next_siblings)) # 下面的兄弟們(下面的所有兄弟)=>生成器對象
print(len(list(soup.a.next_siblings))) # 7 內容也算是
print(soup.a.previous_siblings) # 上面的兄弟們=>生成器對象
print(list(soup.a.previous_siblings)) # 上面的兄弟們=>生成器對象
- 根據標簽查找屬性:
# 查找第一個標簽
- soup.find(
name 屬性匹配
attrs 屬性查找匹配
text 文本匹配
)
- 查找第一個a標簽
# 根據name中的字符串,與attrs中class屬性值匹配對應的第一個a標簽
soup.find(
name='a',
attrs={'class': '屬性值'}
)
# 查找所有標簽
- soup.find_all()
#2、find_all( name , attrs , recursive , text , **kwargs )
#2.1、name: 搜索name參數的值可以使任一類型的 過濾器 ,字符竄,正則表達式,列表,方法或是 True .
print(soup.find_all(name=re.compile('^t')))
#2.2、keyword: key=value的形式,value可以是過濾器:字符串 , 正則表達式 , 列表, True .
print(soup.find_all(id=re.compile('my')))
print(soup.find_all(href=re.compile('lacie'),id=re.compile('\d'))) #注意類要用class_
print(soup.find_all(id=True)) #查找有id屬性的標簽
# 有些tag屬性在搜索不能使用,比如HTML5中的 data-* 屬性:
data_soup = BeautifulSoup('<div data-foo="value">foo!</div>','lxml')
# data_soup.find_all(data-foo="value") #報錯:SyntaxError: keyword can't be an expression
# 但是可以通過 find_all() 方法的 attrs 參數定義一個字典參數來搜索包含特殊屬性的tag:
print(data_soup.find_all(attrs={"data-foo": "value"}))
# [<div data-foo="value">foo!</div>]
#2.3、按照類名查找,注意關鍵字是class_,class_=value,value可以是五種選擇器之一
print(soup.find_all('a',class_='sister')) #查找類為sister的a標簽
print(soup.find_all('a',class_='sister ssss')) #查找類為sister和sss的a標簽,順序錯誤也匹配不成功
print(soup.find_all(class_=re.compile('^sis'))) #查找類為sister的所有標簽
#2.4、attrs
print(soup.find_all('p',attrs={'class':'story'}))
#2.5、text: 值可以是:字符,列表,True,正則
print(soup.find_all(text='Elsie'))
print(soup.find_all('a',text='Elsie'))
#2.6、limit參數:如果文檔樹很大那么搜索會很慢.如果我們不需要全部結果,可以使用 limit 參數限制返回結果的數量.效果與SQL中的limit關鍵字類似,當搜索到的結果數量達到 limit 的限制時,就停止搜索返回結果
print(soup.find_all('a',limit=2))
#2.7、recursive:調用tag的 find_all() 方法時,Beautiful Soup會檢索當前tag的所有子孫節點,如果只想搜索tag的直接子節點,可以使用參數 recursive=False .
print(soup.html.find_all('a'))
print(soup.html.find_all('a',recursive=False))
'''
像調用 find_all() 一樣調用tag
find_all() 幾乎是Beautiful Soup中最常用的搜索方法,所以我們定義了它的簡寫方法. BeautifulSoup 對象和 tag 對象可以被當作一個方法來使用,這個方法的執行結果與調用這個對象的 find_all() 方法相同,下面兩行代碼是等價的:
soup.find_all("a")
soup("a")
這兩行代碼也是等價的:
soup.title.find_all(text=True)
soup.title(text=True)
'''
#3、find( name , attrs , recursive , text , **kwargs )
find_all() 方法將返回文檔中符合條件的所有tag,盡管有時候我們只想得到一個結果.比如文檔中只有一個<body>標簽,那么使用 find_all() 方法來查找<body>標簽就不太合適, 使用 find_all 方法并設置 limit=1 參數不如直接使用 find() 方法.下面兩行代碼是等價的:
soup.find_all('title', limit=1)
# [<title>The Dormouse's story</title>]
soup.find('title')
# <title>The Dormouse's story</title>
唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果.
find_all() 方法沒有找到目標是返回空列表, find() 方法找不到目標時,返回 None .
print(soup.find("nosuchtag"))
# None
soup.head.title 是 tag的名字 方法的簡寫.這個簡寫的原理就是多次調用當前tag的 find() 方法:
soup.head.title
# <title>The Dormouse's story</title>
soup.find("head").find("title")
# <title>The Dormouse's story</title>
- 字符串過濾器 字符串全局匹配
- name = 'p'
name 屬性匹配
attrs 屬性查找匹配
text 文本匹配
- 正則過濾器
re模塊匹配
- name = re.compile()
name 屬性匹配
attrs 屬性查找匹配
text 文本匹配
- 列表過濾器
列表內的數據匹配
- name = ['tank', 100]
name 屬性匹配
attrs 屬性查找匹配
text 文本匹配
- bool過濾器
True匹配
- name = True
name 屬性匹配
attrs 屬性查找匹配
text 文本匹配
- 方法過濾器
用于一些要的屬性以及不需要的屬性查找。
- name = func()
name 屬性匹配
attrs 屬性查找匹配
text 文本匹配
屬性:
- class_
- id
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a id="cxk" href="http://example.com/cxk">蔡徐坤打籃球真厲害,還會唱歌,跳舞,Rap!!!!</a>
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc, 'lxml')
# 根據name查找節點標簽
a_tag = soup.find(name='a') # 查找的是第一個a標簽
print(a_tag)
# 根據attrs屬性查找節點標簽
a_tag = soup.find(attrs={"id": "cxk"}) # id=cxk
print(a_tag)
# 根據文本找節點
a_tag = soup.find(text="The Dormouse's story")
print(a_tag)
# name與attrs配合使用
res = soup.find(name='a', attrs={'id': 'link3'})
res = soup.find(name='a', attrs={'id': 'link3'}, text='Tillie')
print(res)
import re
# # print(soup)
# # 查找class屬性值中包含 s的節點 # 選擇第一個
res = soup.find(attrs={'class': re.compile('s')})
# # 查找標簽名字中包含a的節點 # 選擇第一個
res = soup.find(name=re.compile('a'))
print(res)
# print(soup)
# 獲取第一個a標簽 或 者p標簽的節點
res = soup.find(name=['a', 'p'])
print(res)
# 獲取所有的a標簽與p標簽的節點
res = soup.find_all(name=['a', 'p'])
print(res)
print(soup.find_all(True)) # 獲取所有為真的標簽
for tag in soup.find_all(True):
print(tag.name)
# 函數用于判斷節點中有class沒有id的節點,并將該節點返回
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
print(soup.find_all(has_class_but_no_id))
print(soup.select('#cxk')) # 查找id為cxk的節點
print(soup.select('.story')) # 查找類為story的節點
鏈接:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#id40
目前已經有成千上萬的三方庫可供選擇,這個也是python魅力吸引人的地方,有許許多多的輪子,不必每個東西都自己造輪子,可以選擇合適的三方庫用在項目中會變得事半功倍。如下圖就是python官方網站上查詢三方庫的界面,看這個數字就知道這是一門具有濃重的有歷史氣息的語言。
在Python中,安裝第三方模塊,是通過setuptools這個工具完成的。Python有兩個封裝了setuptools的包管理工具:easy_install和pip。目前官方推薦使用pip。
現在,讓我們來安裝一個第三方庫——Python Imaging Library,這是Python下非常強大的處理圖像的工具庫。一般來說,第三方庫都會在Python官方的pypi.python.org網站注冊,要安裝一個第三方庫,必須先知道該庫的名稱,可以在官網或者pypi上搜索,比如Python Imaging Library的名稱叫PIL,因此,安裝Python Imaging Library的命令就是:
pip install PIL
耐心等待下載并安裝后,就可以使用PIL了。
有了PIL,處理圖片易如反掌。隨便找個圖片生成縮略圖:
>>> import Image
>>> im = Image.open('test.png')
>>> print im.format, im.size, im.mode
PNG (400, 300) RGB
>>> im.thumbnail((200, 100))
>>> im.save('thumb.jpg', 'JPEG')
默認情況下,Python解釋器會搜索當前目錄、所有已安裝的內置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中:
>>> import sys
>>> sys.path
['', '/Library/Python/2.7/site-packages/pycrypto-2.6.1-py2.7-macosx-10.9-intel.egg', '/Library/Python/2.7/site-packages/PIL-1.1.7-py2.7-macosx-10.9-intel.egg', …]
注意:通過pip安裝的第三方庫,一般都在python安裝路徑下的site-packages目錄
如果我們要添加自己的搜索目錄,有兩種方法:
一是直接修改sys.path,添加要搜索的目錄:
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
這種方法是在運行時修改,運行結束后失效。
第二種方法是設置環境變量PYTHONPATH,該環境變量的內容會被自動添加到模塊搜索路徑中。設置方式與設置Path環境變量類似。注意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響。
功能齊全的爬蟲框架
其他
通用
清理
用于解析和操作簡單文本的庫。
通用
轉換
Slug化
通用解析器
人的名字
電話號碼
用戶代理字符串
特定格式文件處理
解析和處理特定文本格式的庫。
通用
HTTP
處理人類語言問題的庫。
異步網絡編程庫
解析/修改網址和網絡地址庫。
URL
網絡地址
提取網頁內容的庫。
HTML頁面的文本和元數據
用于WebSocket的庫。
Pygame:https://www.python.org/ 面向游戲開發入門的Python第三方庫
Panda3D:http://www.panda3d.org/ 開源、跨平臺的3D渲染和游戲開發庫
cocos2d:https://pypi.org/project/cocos2d/ 構建2D游戲和圖形界面交互式應用的框架
*請認真填寫需求信息,我們會在24小時內與您取得聯系。