詳解Python網(wǎng)絡(luò)爬蟲功能的基本寫法
網(wǎng)絡(luò)爬蟲,即Web Spider,是一個(gè)很形象的名字。把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來(lái)爬去的蜘蛛。
1. 網(wǎng)絡(luò)爬蟲的定義
網(wǎng)絡(luò)蜘蛛是通過(guò)網(wǎng)頁(yè)的鏈接地址來(lái)尋找網(wǎng)頁(yè)的。從網(wǎng)站某一個(gè)頁(yè)面(通常是首頁(yè))開(kāi)始,讀取網(wǎng)頁(yè)的內(nèi)容,找到在網(wǎng)頁(yè)中的其它鏈接地址,然后通過(guò)這些鏈接地址尋找下一個(gè)網(wǎng)頁(yè),這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁(yè)都抓取完為止。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè)網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個(gè)原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè)都抓取下來(lái)。這樣看來(lái),網(wǎng)絡(luò)爬蟲就是一個(gè)爬行程序,一個(gè)抓取網(wǎng)頁(yè)的程序。網(wǎng)絡(luò)爬蟲的基本操作是抓取網(wǎng)頁(yè)。
2. 瀏覽網(wǎng)頁(yè)的過(guò)程
抓取網(wǎng)頁(yè)的過(guò)程其實(shí)和讀者平時(shí)使用IE瀏覽器瀏覽網(wǎng)頁(yè)的道理是一樣的。比如說(shuō)你在瀏覽器的地址欄中輸入 www.baidu.com 這個(gè)地址。
打開(kāi)網(wǎng)頁(yè)的過(guò)程其實(shí)就是瀏覽器作為一個(gè)瀏覽的“客戶端”,向服務(wù)器端發(fā)送了 一次請(qǐng)求,把服務(wù)器端的文件“抓”到本地,再進(jìn)行解釋、展現(xiàn)。
HTML是一種標(biāo)記語(yǔ)言,用標(biāo)簽標(biāo)記內(nèi)容并加以解析和區(qū)分。瀏覽器的功能是將獲取到的HTML代碼進(jìn)行解析,然后將原始的代碼轉(zhuǎn)變成我們直接看到的網(wǎng)站頁(yè)面。
3. 基于python實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲功能
1). python獲取html頁(yè)面
其實(shí),最基本的抓站,兩句話就可以了:
import urllib2
content = urllib2.urlopen('http://XXXX').read()
這樣可以得到整個(gè) html 文檔,關(guān)鍵的問(wèn)題是我們可能需要從這個(gè)文檔中獲取我們需要的有用信息,而不是整個(gè)文檔。這就需要解析充滿了各種標(biāo)簽的 html。
2). python爬蟲抓取頁(yè)面后解析html方法
python爬蟲html解析庫(kù)SGMLParser
Python 默認(rèn)自帶 HTMLParser 以及 SGMLParser 等等解析器,前者實(shí)在是太難用了,我就用 SGMLParser 寫了一個(gè)示例程序:
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')
很簡(jiǎn)單,這里定義了一個(gè)叫做 ListName 的類,繼承 SGMLParser 里面的方法。使用一個(gè)變量 is_h4 做標(biāo)記判定 html 文件中的 h4 標(biāo)簽,如果遇到 h4 標(biāo)簽,則將標(biāo)簽內(nèi)的內(nèi)容加入到 List 變量 name 中。解釋一下 start_h4() 和 end_h4() 函數(shù),他們?cè)褪?SGMLParser 中的
start_tagname(self, attrs) end_tagname(self)
tagname 就是標(biāo)簽名稱,比如當(dāng)遇到 <pre>,就會(huì)調(diào)用 start_pre,遇到 </pre>,就會(huì)調(diào)用 end_pre。attrs 為標(biāo)簽的參數(shù),以 [(attribute, value), (attribute, value), ...] 的形式傳回。
python爬蟲html解析庫(kù)pyQuery
pyQuery 是 jQuery 在 python 中的實(shí)現(xiàn),能夠以 jQuery 的語(yǔ)法來(lái)操作解析 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解析庫(kù)BeautifulSoup
有個(gè)頭痛的問(wèn)題是,大部分的網(wǎng)頁(yè)都沒(méi)有完全遵照標(biāo)準(zhǔn)來(lái)寫,各種莫名其妙的錯(cuò)誤令人想要找出那個(gè)寫網(wǎng)頁(yè)的人痛打一頓。為了解決這個(gè)問(wèn)題,我們可以選擇著名的 BeautifulSoup 來(lái)解析html 文檔,它具有很好的容錯(cuò)能力。
以上就是本文的全部?jī)?nèi)容,對(duì)Python網(wǎng)絡(luò)爬蟲功能的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
- Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程
- Python爬蟲實(shí)例_城市公交網(wǎng)絡(luò)站點(diǎn)數(shù)據(jù)的爬取方法
- Python3網(wǎng)絡(luò)爬蟲之使用User Agent和代理IP隱藏身份
- Python網(wǎng)絡(luò)爬蟲出現(xiàn)亂碼問(wèn)題的解決方法
- Python網(wǎng)絡(luò)爬蟲實(shí)例講解
- python3使用urllib模塊制作網(wǎng)絡(luò)爬蟲
- 以Python的Pyspider為例剖析搜索引擎的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)方法
- 使用Python編寫簡(jiǎn)單網(wǎng)絡(luò)爬蟲抓取視頻下載資源
- python使用rabbitmq實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲示例
- Python發(fā)展史及網(wǎng)絡(luò)爬蟲
相關(guān)文章
python3.7中安裝paddleocr及paddlepaddle包的多種方法
這篇文章主要介紹了python3.7中安裝paddleocr及paddlepaddle包,本文通過(guò)多種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
python 殺死自身進(jìn)程的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python 殺死自身進(jìn)程的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
python中數(shù)組和列表的簡(jiǎn)單實(shí)例
,Python數(shù)據(jù)類型分為很多種,其中包括元組、字典、列表等,下面這篇文章主要給大家介紹了python中數(shù)組和列表使用的相關(guān)資料,以及python列表和Numpy數(shù)組的區(qū)別,需要的朋友可以參考下2022-03-03
Anaconda環(huán)境改名的實(shí)現(xiàn)步驟
本文主要介紹了Anaconda環(huán)境改名的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
python列表刪除元素的三種實(shí)現(xiàn)方法
本文主要介紹了python列表刪除元素的三種實(shí)現(xiàn)方法,主要包括pop方法,remove方法,del方法這三種,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
python 實(shí)現(xiàn)turtle畫圖并導(dǎo)出圖片格式的文件
今天小編就為大家分享一篇python 實(shí)現(xiàn)turtle畫圖并導(dǎo)出圖片格式的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python?Flask-Login構(gòu)建強(qiáng)大的用戶認(rèn)證系統(tǒng)實(shí)例探究
這篇文章主要為大家介紹了Python?Flask-Login構(gòu)建強(qiáng)大的用戶認(rèn)證系統(tǒng)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化
這篇文章主要介紹了python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03

