詳解Python網(wǎng)絡(luò)爬蟲功能的基本寫法
網(wǎng)絡(luò)爬蟲,即Web Spider,是一個很形象的名字。把互聯(lián)網(wǎng)比喻成一個蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。
1. 網(wǎng)絡(luò)爬蟲的定義
網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁的鏈接地址來尋找網(wǎng)頁的。從網(wǎng)站某一個頁面(通常是首頁)開始,讀取網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網(wǎng)頁,這樣一直循環(huán)下去,直到把這個網(wǎng)站所有的網(wǎng)頁都抓取完為止。如果把整個互聯(lián)網(wǎng)當(dāng)成一個網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。這樣看來,網(wǎng)絡(luò)爬蟲就是一個爬行程序,一個抓取網(wǎng)頁的程序。網(wǎng)絡(luò)爬蟲的基本操作是抓取網(wǎng)頁。
2. 瀏覽網(wǎng)頁的過程
抓取網(wǎng)頁的過程其實和讀者平時使用IE瀏覽器瀏覽網(wǎng)頁的道理是一樣的。比如說你在瀏覽器的地址欄中輸入 www.baidu.com 這個地址。
打開網(wǎng)頁的過程其實就是瀏覽器作為一個瀏覽的“客戶端”,向服務(wù)器端發(fā)送了 一次請求,把服務(wù)器端的文件“抓”到本地,再進行解釋、展現(xiàn)。
HTML是一種標(biāo)記語言,用標(biāo)簽標(biāo)記內(nèi)容并加以解析和區(qū)分。瀏覽器的功能是將獲取到的HTML代碼進行解析,然后將原始的代碼轉(zhuǎn)變成我們直接看到的網(wǎng)站頁面。
3. 基于python實現(xiàn)的網(wǎng)絡(luò)爬蟲功能
1). python獲取html頁面
其實,最基本的抓站,兩句話就可以了:
import urllib2 content = urllib2.urlopen('http://XXXX').read()
這樣可以得到整個 html 文檔,關(guān)鍵的問題是我們可能需要從這個文檔中獲取我們需要的有用信息,而不是整個文檔。這就需要解析充滿了各種標(biāo)簽的 html。
2). python爬蟲抓取頁面后解析html方法
python爬蟲html解析庫SGMLParser
Python 默認(rèn)自帶 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 做標(biāo)記判定 html 文件中的 h4 標(biāo)簽,如果遇到 h4 標(biāo)簽,則將標(biāo)簽內(nèi)的內(nèi)容加入到 List 變量 name 中。解釋一下 start_h4() 和 end_h4() 函數(shù),他們原型是 SGMLParser 中的
start_tagname(self, attrs) end_tagname(self)
tagname 就是標(biāo)簽名稱,比如當(dāng)遇到 <pre>,就會調(diào)用 start_pre,遇到 </pre>,就會調(diào)用 end_pre。attrs 為標(biāo)簽的參數(shù),以 [(attribute, value), (attribute, value), ...] 的形式傳回。
python爬蟲html解析庫pyQuery
pyQuery 是 jQuery 在 python 中的實現(xiàn),能夠以 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
有個頭痛的問題是,大部分的網(wǎng)頁都沒有完全遵照標(biāo)準(zhǔn)來寫,各種莫名其妙的錯誤令人想要找出那個寫網(wǎng)頁的人痛打一頓。為了解決這個問題,我們可以選擇著名的 BeautifulSoup 來解析html 文檔,它具有很好的容錯能力。
以上就是本文的全部內(nèi)容,對Python網(wǎng)絡(luò)爬蟲功能的實現(xiàn)進行了詳細(xì)的分析介紹,希望對大家的學(xué)習(xí)有所幫助。
- Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程
- Python爬蟲實例_城市公交網(wǎng)絡(luò)站點數(shù)據(jù)的爬取方法
- Python3網(wǎng)絡(luò)爬蟲之使用User Agent和代理IP隱藏身份
- Python網(wǎng)絡(luò)爬蟲出現(xiàn)亂碼問題的解決方法
- Python網(wǎng)絡(luò)爬蟲實例講解
- python3使用urllib模塊制作網(wǎng)絡(luò)爬蟲
- 以Python的Pyspider為例剖析搜索引擎的網(wǎng)絡(luò)爬蟲實現(xiàn)方法
- 使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源
- python使用rabbitmq實現(xiàn)網(wǎng)絡(luò)爬蟲示例
- Python發(fā)展史及網(wǎng)絡(luò)爬蟲
相關(guān)文章
python網(wǎng)絡(luò)編程示例(客戶端與服務(wù)端)
這篇文章主要介紹了python網(wǎng)絡(luò)編程示例,提供了客戶端與服務(wù)端,需要的朋友可以參考下2014-04-04Python通過yagmail實現(xiàn)發(fā)送郵件代碼解析
這篇文章主要介紹了Python通過yagmail實現(xiàn)發(fā)送郵件代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10pandas創(chuàng)建DataFrame的方式小結(jié)
今天給大家整理了pandas創(chuàng)建DataFrame的方式小結(jié),現(xiàn)在我們就來看看這三種生成Dataframe的方式,每種方式通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09Python加載文件內(nèi)容的兩種實現(xiàn)方式
這篇文章主要介紹了Python加載文件內(nèi)容的兩種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09Python異步發(fā)送日志到遠(yuǎn)程服務(wù)器詳情
這篇文章主要介紹了Python異步發(fā)送日志到遠(yuǎn)程服務(wù)器詳情,文章通過簡單輸出到cmd和文件中的代碼展開詳情,需要的朋友可以參考一下2022-07-07python實現(xiàn)網(wǎng)站微信登錄的示例代碼
這篇文章主要介紹了python實現(xiàn)網(wǎng)站微信登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09