Python爬蟲 獲取貼吧內容

2021-07-10 12:15:44 字數 4134 閱讀 4697

參考寫的第乙個比較完整的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...