python3屏幕抓取程序_python之屏幕抓取
Tidy 和 HTML 解析
Beautiful Soup
屏幕抓取:是通過程序下載網(wǎng)頁并從中提取信息的過程。
簡(jiǎn)單來見:下載數(shù)據(jù)并對(duì)其進(jìn)行分析
思路:可使用urllib來獲取網(wǎng)頁的HTML代碼,再使用正則表達(dá)式從中提取信息。
例如:假設(shè)要從python Job Board(http://python.org/jobs)提取招聘單位的名稱和網(wǎng)站。
通過查看該網(wǎng)站的源代碼,可發(fā)現(xiàn)類似于下面的鏈接中找到名稱和URL:
Python Engineer
如下:簡(jiǎn)單的屏幕抓取程序
from urllib.request importurlopenimportre
p= re.compile('(.*?)')
text= urlopen('http://python.org/jobs').read().decode()for url,name inp.findall(text):print('{}({})'.format(name,url))
以上代碼需要跟進(jìn)的地方:
1.正則表達(dá)式一點(diǎn)都不容易理解。如果HTML代碼和查詢更復(fù)雜,那正則表達(dá)式就難以理解和維護(hù)
2.無法處理獨(dú)特的HTML內(nèi)容;比如CDATA部分和實(shí)符字體(如&)
正則表達(dá)式依賴于HTML代碼的細(xì)節(jié),并不是抽象的結(jié)構(gòu);意味著只要網(wǎng)頁的結(jié)構(gòu)發(fā)生一點(diǎn)點(diǎn)變化,那這個(gè)程序可能就無效了。
針對(duì)基于正則表達(dá)式的方法存在的問題,可有兩種解決方案:
(1)結(jié)合使用程序Tidy(一個(gè)python庫)和XHTML解析
(2) 使用專為屏幕抓取而設(shè)計(jì)的Beautiful Soup
Tidy 和XHTML解析
Tidy是用于對(duì)格式不正確且不嚴(yán)謹(jǐn)?shù)腍TML進(jìn)行修復(fù)的工具,它非常聰明,能夠修復(fù)很多常見的錯(cuò)誤,從而完成大量你不愿意做的工作。它還提供了極大的配置空間,讓你能夠開 / 關(guān)各種校正。
當(dāng)然,Tidy并不能修復(fù)HTML文件存在的所有問題,但確實(shí)能夠確保文件是格式良好的(即所有元素都嵌套正確),這讓解析工作容易很多。
獲取Tidy
有多個(gè)用于python的Tidy庫包裝器,至于哪個(gè)最新并非固定不變的,找使用pip來找出可供使用的包裝器:
$pip search tidy
可選擇安裝PyTidyLib:
$ pip install pytidylib
并非一定要安裝Tidy庫包裝器。如果你是用的是unix或者linux系統(tǒng),很可能已經(jīng)默認(rèn)安裝了命令行版Tidy。此外,不管使用的是什么系統(tǒng),都可以從Tidy網(wǎng)站上獲取可執(zhí)行的二進(jìn)制版本,有了二進(jìn)制版本之后,就可以使用模塊subprocess(或其他包含open函數(shù)的模塊)來運(yùn)行Tidy程序了。
如果python找不到tidy,可能需要提供這個(gè)可執(zhí)行文件的完整路徑。
XHTML 和 HTML的主要區(qū)別在于,XHTML非常嚴(yán)格,要求顯式地結(jié)束所有的元素;
因此,在HTML可通過(使用標(biāo)簽
)開始另一個(gè)段落來結(jié)束當(dāng)前段落,但在XHTML中,必須先(使用標(biāo)簽
)顯式地結(jié)束當(dāng)前段落。這讓XHTML解析起來容易得多,因?yàn)槟隳芮宄刂钡胶螘r(shí)進(jìn)入或者離開各種元素,XHTML的另一個(gè)優(yōu)點(diǎn):它是一種XML方言,可食用各種出色的工具(XPath)來處理
要求對(duì)Tidy生成的格式良好的XHTML進(jìn)行解析,一種非常簡(jiǎn)單的方式就是使用標(biāo)準(zhǔn)庫模塊html.parser中的HTMLParser類
待補(bǔ)充~
總結(jié)
以上是生活随笔為你收集整理的python3屏幕抓取程序_python之屏幕抓取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python翻译成matlab_matl
- 下一篇: 电铃的外部叫什么名字?