代碼:
program: csdn博文爬蟲
function: 實現(xiàn)對我的csdn主頁所有博文的日期、主題、訪問量、評論個數(shù)信息爬取
version: python 3.5.1
time: 2016/05/29
author: yr
import urllib.request,re,time,random,gzip
def saveFile(data,i):
path = "E:\\projects\\Spider\\05_csdn\\papers\\paper_"+str(i+1)+".txt"
file = open(path,'wb')
page = '當(dāng)前頁:'+str(i+1)+'\n'
file.write(page.encode('gbk'))
#將博文信息寫入文件(以utf-8保存的文件聲明為gbk)
for d in data:
d = str(d)+'\n'
file.write(d.encode('gbk'))
file.close()
def ungzip(data):
try:
#print("正在解壓縮...")
data = gzip.decompress(data)
#print("解壓完畢...")
except:
print("未經(jīng)壓縮,無需解壓...")
return data
class CSDNSpider:
def __init__(self,pageIdx=1,url="http://blog.csdn.net/fly_yr/article/list/1"):
#默認當(dāng)前頁
self.pageIdx = pageIdx
self.url = url[0:url.rfind('/') + 1] + str(pageIdx)
self.headers = {
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "zh-CN,zh;q=0.8",
"Host": "blog.csdn.net"
}
#求總頁數(shù)
def getPages(self):
req = urllib.request.Request(url=self.url, headers=self.headers)
res = urllib.request.urlopen(req)
# 從我的csdn博客主頁抓取的內(nèi)容是壓縮后的內(nèi)容,先解壓縮
data = res.read()
data = ungzip(data)
data = data.decode('utf-8')
pages = r'<div.*?pagelist">.*?<span>.*?共(.*?)頁</span>'
#link = r'<div.*?pagelist">.*?<a.*?href="(.*?)".*?</a>'
# 計算我的博文總頁數(shù)
pattern = re.compile(pages, re.DOTALL)
pagesNum = re.findall(pattern, data)
return pagesNum
#設(shè)置要抓取的博文頁面
def setPage(self,idx):
self.url = self.url[0:self.url.rfind('/')+1]+str(idx)
#讀取博文信息
def readData(self):
ret=[]
str = r'<div.*?article_item">.*?<span class="(.*?)"></span>.*?link_title"><a href="(.*?)">(.*?)</a>.*?' + \
r'<span class="link_postdate">(.*?)</span>.*?</a>(.??)(.??)</span>.*?' + \
r'</a>.*?(.??)(.??)</span>'
req = urllib.request.Request(url=self.url, headers=self.headers)
res = urllib.request.urlopen(req)
# 從我的csdn博客主頁抓取的內(nèi)容是壓縮后的內(nèi)容,先解壓縮
data = res.read()
data = ungzip(data)
data = data.decode('utf-8')
pattern = re.compile(str,re.DOTALL)
items = re.findall(pattern,data)
for item in items:
if item[0] == "ico ico_type_Original":
s = '原'
else:
s = '轉(zhuǎn)'
ret.append('\r\n日期:' + item[3] + '\r\t' + s
+ '\r\n標(biāo)題:' + item[2].strip()
+ '\r\n鏈接:http://blog.csdn.net' + item[1]
+ '\r\n閱讀:' + item[4] + '\r\t評論:' + item[5] + '\r\n')
return ret
cs = CSDNSpider()
pagesNum = int(cs.getPages())
print("博文總頁數(shù): ",pagesNum)
for idx in range(pagesNum):
cs.setPage(idx)
print("當(dāng)前頁:",idx+1)
#讀取當(dāng)前頁的所有博文,結(jié)果為list類型
papers = cs.readData()
saveFile(papers,idx)
報錯:
Traceback (most recent call last):
File "I:/python_work/pachong/request www.py", line 99, in <module>
pagesNum = int(cs.getPages())
File "I:/python_work/pachong/request www.py", line 63, in getPages
pagesNum = re.findall(pattern, data)[0]
IndexError: list index out of range
小白求解
因為你的代碼不是連接完整的,推測你63行前后應(yīng)該有對list遍歷操作,是不是對list有刪除的操作?如果是的話
看一下這個https://segmentfault.com/q/10...
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。