Python網路爬蟲功能的基本寫法介紹

來源:互聯網
上載者:User
這篇文章主要介紹了Python網路爬蟲功能的基本寫法,網路爬蟲,即Web Spider,是一個很形象的名字。把互連網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛,對網路爬蟲感興趣的朋友可以參考本文

網路爬蟲,即Web Spider,是一個很形象的名字。把互連網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。

1. 網路爬蟲的定義

網路蜘蛛是通過網頁的連結地址來尋找網頁的。從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址,然後通過這些連結地址尋找下一個網頁,這樣一直迴圈下去,直到把這個網站所有的網頁都抓取完為止。如果把整個互連網當成一個網站,那麼網路蜘蛛就可以用這個原理把互連網上所有的網頁都抓取下來。這樣看來,網路爬蟲就是一個爬行程式,一個抓取網頁的程式。網路爬蟲的基本操作是抓取網頁。

2. 瀏覽網頁的過程

抓取網頁的過程其實和讀者平時使用IE瀏覽器瀏覽網頁的道理是一樣的。比如說你在瀏覽器的地址欄中輸入 www.baidu.com 這個地址。

開啟網頁的過程其實就是瀏覽器作為一個瀏覽的“用戶端”,向伺服器端發送了 一次請求,把伺服器端的檔案“抓”到本地,再進行解釋、展現。

HTML是一種標記語言,用標籤標記內容並加以解析和區分。瀏覽器的功能是將擷取到的HTML代碼進行解析,然後將原始的代碼轉變成我們直接看到的網站頁面。

3. 基於python實現的網路爬蟲功能

1). python擷取html頁面

其實,最基本的抓站,兩句話就可以了:


import urllib2content = urllib2.urlopen('http://XXXX').read()

這樣可以得到整個 html 文檔,關鍵的問題是我們可能需要從這個文檔中擷取我們需要的有用資訊,而不是整個文檔。這就需要解析充滿了各種標籤的 html。

2). python爬蟲抓取頁面後解析html方法

python爬蟲html解析庫SGMLParser

Python 預設內建 HTMLParser 以及 SGMLParser 等等解析器,前者實在是太難用了,我就用 SGMLParser 寫了一個樣本程式:


import urllib2from 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 = 1def 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 就是標籤名稱,比如當遇到 <pre>,就會調用 start_pre,遇到 </pre>,就會調用 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 pyqdoc=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 文檔,它具有很好的容錯能力。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.