參考寫的第乙個比較完整的python爬蟲程式。
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
#處理頁面標籤類
class tool:
#去除img標籤,7位長空格
removeimg = re.compile('| |')
#刪除超連結標籤
removeaddr = re.compile('|')
#把換行的標籤換為\n
replaceline = re.compile('|||')
#將**製表替換為\t
replacetd= re.compile('')
#把段落開頭換為\n加空兩格
replacepara = re.compile('')
#將換行符或雙換行符替換為\n
replacebr = re.compile('|')
#將其餘標籤剔除
removeextratag = re.compile('<.*?>')
def replace(self,x):
x = re.sub(self.removeimg,"",x)
x = re.sub(self.removeaddr,"",x)
x = re.sub(self.replaceline,"\n",x)
x = re.sub(self.replacetd,"\t",x)
x = re.sub(self.replacepara,"\n ",x)
x = re.sub(self.replacebr,"\n",x)
x = re.sub(self.removeextratag,"",x)
#strip()將前後多餘內容刪除
return x.strip()
class bdtb:
#初始化,傳入基位址,是否只看樓主的引數
def __init__(self,baseurl,seelz):
self.baseurl = baseurl
self.seelz = '?see_lz='+str(seelz)
self.tool = tool()
self.file = none
#傳入頁碼,獲取該頁帖子的**
def getpage(self,pagenum):
try:
url = self.baseurl+ self.seelz + '&pn=' + str(pagenum)
request = urllib2.request(url)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
#print content
return content
except urllib2.urlerror, e:
if hasattr(e,"reason"):
return none
def gettitle(self):
page = self.getpage(1)
pattern = re.compile('',re.s)
#pattern = re.compile('',re.s)
#pattern = re.compile('',re.s)
#_compile(pattern, flags).search(string)報錯就修改,加str
#result = re.search(pattern,str(page))
#findall得到的result是list結構的
result = re.findall(pattern,page)
if result:
#print result.group(1) #測試輸出
#return result.group(1).strip()
#print result.encode('utf-8')
"""因為result是list,只有一維的
for i in range(len(result)):
for j in range(len(result[i])):
print result[i][j].encode('utf-8')
"""for i in range(len(result)):
self.file = open(result[i]+ ".txt","w+")
self.file.writelines(result[i].encode('utf-8') + '\n')
self.file.close()
#print result
return result[0]
else:
return none
# 獲取帖子一共有多少頁
def getpagenum(self):
page = self.getpage(1)
pattern = re.compile('.*?(.*?)',re.s)
#result = re.search(pattern,page)
result = re.findall(pattern,page)
if result:
#print result.group(1) #測試輸出
#return result.group(1).strip()
#for i in range(len(result)):
# print result[i].encode('utf-8')
#print result
return result[0].encode('utf-8')
else:
return none
#獲取每一層樓的內容,傳入頁面內容
def getcontent(self):
page = self.getpage(1)
#pattern = re.compile('(.*?)
',re.s)
#l_post l_post_bright j_l_post clearfix
#pattern = re.compile('(.*?)
',re.s)
#pattern = re.compile('(.*?)',re.s)
#pattern = re.compile('(.*?)
',re.s)
pattern = re.compile('(.*?)
',re.s)
items = re.findall(pattern,page)
#print len(items)
floor = 1
#a表示追加模式寫入txt
self.file = open(self.gettitle()+ ".txt","a")
for i in range(len(items)):
#print floor,u"樓---------------------------------------\n"
self.file.write(str(floor)+ '樓---------------------------------------\n')
floor += 1
#print self.tool.replace(items[i].encode('utf-8'))
self.file.write(self.tool.replace(items[i].encode('utf-8')) + '\n\n')
print '正在寫入第'+str(floor-1)+'樓...'
self.file.close()
#baseurl = ''
#baseurl = ''
#baseurl = ''
baseurl = ''
#下面引數0表示看所有資訊,1表示只看樓主資訊
bdtb = bdtb(baseurl,0)
#bdtb.getpage(1)
#print bdtb.gettitle()
print '該貼吧總共有'+ str(bdtb.getpagenum()) + '頁'
bdtb.getcontent()
Python爬蟲實踐,獲取百度貼吧內容
貼吧位址 python版本 3.6 瀏覽器版本 chrome 由於是第乙個實驗性質爬蟲,我們要做的不多,我們需要做的就是 1 從網上爬下特定頁碼的網頁 2 對於爬下的頁面內容進行簡單的篩選分析 3 找到每一篇帖子的 標題 發帖人 日期 樓層 以及跳轉鏈結 4 將結果儲存到文字。其實這些都是中文字元,...
爬蟲 1 5獲取百度貼吧內容
import requests import time from bs4 import beautifulsoup 首先我們寫好抓取網頁的函式 url def get html url try r requests.get url,timeout 30 r.raise for status r.en...
Python貼吧小爬蟲
不用登陸,cookie,header 用了一點正規表示式 coding utf 8 created on sun apr 10 14 00 32 2016 author albert import urllib2 import re i 0begin int raw input u 輸入起始頁 en...