工作中經常與資料打交道,去網上抓取資料也成了家常便飯。以前就準備抽空總結下的。
最近剛好看到
上這篇文章有人問到了,
而且下面有熱心pythoner 已經回答了,特此整理下,以備忘。
問題:現在要抓取一批頁面,並將指定標籤裡面的資料抓取出來,如何做到通用性好,穩定可用?
1、使用第三方庫:mechanize
對於mechanize的詳細使用,參考 2、
使用第三方庫:
beautiful soup
擴充套件包來解析
1
import
urllib
2
from
bs4
import
beautifulsoup
3
content
=
urllib.urlopen(
).read()
4
soup
=
beautifulsoup(content)
5
print
soup.find(
'title'
).string
對於beautiful soup的詳細使用,參考 3、
使用第三方庫:
lxml
擴充套件包來解析
1
from
lxml
import
html
2
doc
=
html.parse(
)
3
title
=
doc.find(
'.//title'
).text
4
print
title
4、直接使用正則來解析:
1
import
urllib
2
import
re
3
url
=
4
html
=
urllib.urlopen(url).read()
5
m
=
re.findall(r
"(.*)"
, html)
6
print
m[
0
]
有關python正則的使用請見《python正規表示式操作指南》
注:
以上幾種方法中,推薦優先使用前 3
種,或者有其它優秀的第三方庫你也可以嘗試。
之所以不推薦最後的正則解析原因有2:
(1)html存在一些標籤不規範的場景,如,
>, 等可以單獨出現,不用配對出現,
你可以簡單的認為他的語法非常靈活,不像 xml 那樣限制的很
嚴格,之所以瀏覽器能解析是因為
瀏覽器背後做了許多不為人知的解析
工作,如果你要用正則來做,你也需要考慮很多情況,
而且通用性也會大打折扣。
這也是建議你選擇第三方庫的主要原因。
(2)直接用正則這麼解析,在面對複雜的抓取的時候,正則的效能會是嚴重的瓶頸。
python 抓取網頁資料
利用python進行簡單的資料分析 1 首先要進行分析網頁的html,我們所要抓取的資料是根據銷量排名的手機資訊,所以主要需要抓取手機的型號 銷量,按照 由小見大 的方法來獲取所需要的html資訊,如下圖所示 由上可以看出手機型號所在的html標籤是 h3 手機 是在div中的class屬性為 pr...
python爬取網頁資料
import refrom urllib.request import urlopen 爬取網頁資料資訊 def getpage url response urlopen url return response.read decode utf 8 defparsepage s ret re.find...
網路爬蟲之網頁資料解析(XPath)
xpath定義 xpath表示式 lxml庫 xpath案例 引入有人說,我正則用的不好,處理html文件很累,有沒有其他的方法?有!那就是xpath,我們可以先將網路獲取的string型別資料轉換成 html xml文件,然後用 xpath 查詢 html xml 節點或元素。什麼是xml 大家都...