Python爬蟲實(shí)現(xiàn)網(wǎng)頁信息抓取功能示例【URL與正則模塊】
本文實(shí)例講述了Python爬蟲實(shí)現(xiàn)網(wǎng)頁信息抓取功能。分享給大家供大家參考,具體如下:
首先實(shí)現(xiàn)關(guān)于網(wǎng)頁解析、讀取等操作我們要用到以下幾個(gè)模塊
import urllib import urllib2 import re
我們可以嘗試一下用readline方法讀某個(gè)網(wǎng)站,比如說百度
def test():
f=urllib.urlopen('http://www.baidu.com')
while True:
firstLine=f.readline()
print firstLine
下面我們說一下如何實(shí)現(xiàn)網(wǎng)頁信息的抓取,比如說百度貼吧
我們大概要做幾件事情:
首先獲取網(wǎng)頁及其代碼,這里我們要實(shí)現(xiàn)多頁,即其網(wǎng)址會(huì)改變,我們傳遞一個(gè)頁數(shù)
def getPage(self,pageNum):
try:
url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
#創(chuàng)建request對(duì)象
request=urllib2.Request(url)
response=urllib2.urlopen(request)
#print 'URL:'+url
return response.read()
except Exception,e:
print e
之后我們要獲取小說內(nèi)容,這里咱們分為標(biāo)題和正文。標(biāo)題每頁都有,所以我們獲取一次就好了。
我們可以點(diǎn)擊某網(wǎng)站,按f12查看他的標(biāo)題標(biāo)簽是如何構(gòu)造的,比如說百度貼吧是<title>…………
那我們就匹配reg=re.compile(r'<title>(.*?)。')來抓取這個(gè)信息
標(biāo)題抓取完我們要開始抓去正文了,我們知道正文會(huì)有很多段,所以我們要循環(huán)的去抓取整個(gè)items,這里我們注意
對(duì)于文本的讀寫操作,一定要放在循環(huán)外。同時(shí)加入一些去除超鏈接、<br>等機(jī)制
最后,我們?cè)谥骱瘮?shù)調(diào)用即可
完整代碼:
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#爬蟲之網(wǎng)頁信息抓取
#需要的函數(shù)方法:urllib,re,urllib2
import urllib
import urllib2
import re
#測(cè)試函數(shù)->讀取
#def test():
# f=urllib.urlopen('http://www.baidu.com')
# while True:
# firstLine=f.readline()
# print firstLine
#針對(duì)于百度貼吧獲取前十頁樓主小說文本內(nèi)容
class BDTB:
def __init__(self,baseUrl,seeLZ):
#成員變量
self.baseURL=baseUrl
self.seeLZ='?see_lz='+str(seeLZ)
#獲取該頁帖子的代碼
def getPage(self,pageNum):
try:
url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
#創(chuàng)建request對(duì)象
request=urllib2.Request(url)
response=urllib2.urlopen(request)
#print 'URL:'+url
return response.read()
except Exception,e:
print e
#匹配標(biāo)題
def Title(self):
html=self.getPage(1)
#compile提高正則匹配效率
reg=re.compile(r'<title>(.*?)。')
#返回list列表
items=re.findall(reg,html)
f=open('output.txt','w+')
item=('').join(items)
f.write('\t\t\t\t\t'+item.encode('gbk'))
f.close()
#匹配正文
def Text(self,pageNum):
html=self.getPage(pageNum)
#compile提高正則匹配效率
reg=re.compile(r'"d_post_content j_d_post_content ">(.*?)</div>')
#返回list列表
items=re.findall(reg,html)
f=open('output.txt','a+')
#[1:]切片,第一個(gè)元素不需要,去掉。
for i in items[1:]:
#超鏈接去除
removeAddr=re.compile('<a.*?>|</a>')
#用""替換
i=re.sub(removeAddr,"",i)
#<br>去除
i=i.replace('<br>','')
f.write('\n\n'+i.encode('gbk'))
f.close()
#調(diào)用入口
baseURL='http://tieba.baidu.com/p/4638659116'
bdtb=BDTB(baseURL,1)
print '爬蟲正在啟動(dòng)....'.encode('gbk')
#多頁
bdtb.Title()
print '抓取標(biāo)題完畢!'.encode('gbk')
for i in range(1,11):
print '正在抓取第%02d頁'.encode('gbk')%i
bdtb.Text(i)
print '抓取正文完畢!'.encode('gbk')
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
使用python實(shí)現(xiàn)下載我們想聽的歌曲,速度超快
這篇文章主要介紹了使用python實(shí)現(xiàn)下載我們想聽的歌曲,速度超快,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Playwright如何自定義瀏覽器的下載和啟動(dòng)路徑
playwright是一個(gè)非常有趣的自動(dòng)化測(cè)試工具, 支持Node.js、Python、C# 和 Java語言,下面我們就來看看如何使用Playwright進(jìn)行自定義瀏覽器的下載和啟動(dòng)路徑吧2025-04-04
Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析
這篇文章主要介紹了Python面向?qū)ο笾接袑傩院退接蟹椒?結(jié)合具體案例形式簡(jiǎn)單分析了面向?qū)ο蟪绦蛟O(shè)計(jì)中私有屬性與私有方法的基本功能與使用注意事項(xiàng),需要的朋友可以參考下2019-12-12
python批量telnet檢測(cè)IP地址的端口是否開放
本文主要介紹了python批量telnet檢測(cè)IP地址的端口是否開放,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

