這篇文章主要介紹了Python網路爬蟲功能的基本寫法,網路爬蟲,即Web Spider,是一個很形象的名字。把網路比喻成蜘蛛網,那麼Spider就是在網路上爬來爬去的蜘蛛,對網路爬蟲有興趣的朋友可以參考本文
網路爬蟲,也就是Web Spider,是一個很形象的名字。把網路比喻成蜘蛛網,那麼Spider就是在網路上爬來爬去的蜘蛛。
1. 網路爬蟲的定義
網路蜘蛛是透過網頁的連結位址來尋找網頁的。從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然後通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓完為止。如果把整個網路當成一個網站,那麼網路蜘蛛就可以用這個原理把網路上所有的網頁都抓取下來。這樣看來,網路爬蟲就是一個爬行程序,一個抓取網頁的程式。網路爬蟲的基本操作是抓取網頁。
2. 瀏覽網頁的過程
抓取網頁的過程其實和讀者平時使用IE瀏覽器瀏覽網頁的道理是一樣的。例如你在瀏覽器的網址列輸入 www.baidu.com 這個位址。
打開網頁的過程其實就是瀏覽器作為一個瀏覽的“客戶端”,向伺服器端發送了 一次請求,把伺服器端的文件“抓”到本地,再進行解釋、展現。
HTML是一種標記語言,用標籤標記內容並解析和區分。瀏覽器的功能是將取得到的HTML程式碼進行解析,然後將原始的程式碼轉換成我們直接看到的網站頁面。
3. 基於python實作的網路爬蟲功能
#1).python取得html頁面
#其實,最基本的抓站,兩句話就可以了:
import urllib2 content = urllib2.urlopen('http://XXXX').read()
這樣可以得到整個html 文檔,關鍵的問題是我們可能需要從這個文檔中獲取我們需要的有用信息,而不是整個文件。這就需要解析充滿了各種標籤的 html。
2).python爬蟲抓取頁面後解析html方法
python爬蟲 html解析庫SGMLParser
Python 預設自帶HTMLParser 以及SGMLParser 等等解析器,前者實在是太難用了,我就用SGMLParser 寫了一個範例程式:
import urllib2 from sgmllib import SGMLParser class ListName(SGMLParser): def init(self): SGMLParser.init(self) self.is_h4 = "" self.name = [] def start_h4(self, attrs): self.is_h4 = 1 def end_h4(self): self.is_h4 = "" def handle_data(self, text): if self.is_h4 == 1: self.name.append(text) content = urllib2.urlopen('http://169it.com/xxx.htm').read() listname = ListName() listname.feed(content) for item in listname.name: print item.decode('gbk').encode('utf8')
很簡單,這裡定義了一個叫做ListName 的類,繼承# SGMLParser 裡面的方法。使用一個變數 is_h4 做標記判定 html 檔案中的 h4 標籤,如果遇到 h4 標籤,則將標籤內的內容加入到 List 變數 name 中。解釋一下start_h4() 和end_h4() 函數,他們原型是SGMLParser 中的
start_tagname(self, attrs) end_tagname(self)
tagname 就是標籤名稱,例如當遇到1417fd9caae40516c8185eb949b251ed,就會呼叫start_pre,遇到bc5574f69a0cba105bc93bd3dc13c4ec,就會呼叫end_pre。 attrs 為標籤的參數,以 [(attribute, value), (attribute, value), ...] 的形式傳回。
python爬蟲html解析函式庫pyQuery
#pyQuery 是jQuery 在python 中的實現,能夠以jQuery 的語法來操作解析HTML 文檔,十分方便。使用前需安裝,easy_install pyquery 即可,或Ubuntu 下
sudo apt-get install python-pyquery
以下範例:
from pyquery import PyQuery as pyq doc=pyq(url=r'http://169it.com/xxx.html') cts=doc('.market-cat') for i in cts: print '====',pyq(i).find('h4').text() ,'====' for j in pyq(i).find('.sub'): print pyq(j).text() , print '\n'
python爬蟲html解析庫BeautifulSoup
有個頭痛的問題是,大部分的網頁都沒有完全遵照標準來寫,各種莫名其妙的錯誤令人想要找出那個寫網頁的人痛打一頓。為了解決這個問題,我們可以選擇著名的 BeautifulSoup 來解析html 文檔,它具有很好的容錯能力。
以上就是本文的全部內容,對Python網路爬蟲功能的實現進行了詳細的分析介紹,希望對大家的學習有所幫助。
以上是Python網路爬蟲功能的基本寫法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!