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

高洛峰
發布: 2017-03-13 18:12:29
原創
1931 人瀏覽過

這篇文章主要介紹了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 就是標籤名稱,例如當遇到< pre>,就會呼叫start_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 pyq
doc=pyq(url=r&#39;http://169it.com/xxx.html&#39;)
cts=doc(&#39;.market-cat&#39;)
 
for i in cts:
print &#39;====&#39;,pyq(i).find(&#39;h4&#39;).text() ,&#39;====&#39;
for j in pyq(i).find(&#39;.sub&#39;):
print pyq(j).text() ,
print &#39;\n&#39;
登入後複製

python爬蟲html解析庫BeautifulSoup

有個頭痛的問題是,大部分的網頁都沒有完全遵照標準來寫,各種莫名其妙的錯誤令人想要找出那個寫網頁的人痛打一頓。為了解決這個問題,我們可以選擇著名的 BeautifulSoup 來解析html 文檔,它具有很好的容錯能力。

以上就是本文的全部內容,對Python網路爬蟲功能的實現進行了詳細的分析介紹,希望對大家的學習有所幫助。

以上是Python網路爬蟲功能的基本寫法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!