糗事百科class封裝

2021-08-15 15:39:51 字數 3247 閱讀 4953

import sqlite3, urllib2, re

建立工具類,用於對爬取的結果進行過濾

class

datatool

(object):

# 定義查詢特殊字元的正規表示式

remove_n = re.compile(r'\n')

# |表示或者

br = re.compile(r'|')

quot = re.compile(r'"')

defupdate_res

(self, result_tuple):

# result_tuple是用於接收qsbkspider類傳遞的資料元組。

name = re.sub(self.remove_n, '', result_tuple[0])

# 首先將段子內容前後兩端的\n換行符進行刪除

# 然後再將內容中間的

標籤轉化成\n

content = re.sub(self.remove_n, '', result_tuple[1])

content = re.sub(self.br, '\n', content)

content = re.sub(self.quot, '"', content)

# 好評數

vote_number = re.sub(self.remove_n, '', result_tuple[2])

comment_number = re.sub(self.remove_n, '', result_tuple[3])

data_res = (name, content, vote_number, comment_number)

return data_res

建立運算元據庫的工具類

class

dbmanager

(object):

connect = none

cursor = none

@classmethod

defdb_and_cursor

(cls):

cls.connect = sqlite3.connect('qsbk.db')

cls.cursor = cls.connect.cursor()

@classmethod

definsert_data

(cls, data_tuple):

insert_sql = "insert into qsbk (nick_name, content, vote_number, comment_number) values ('%s', '%s', %d, %d)" % (data_tuple[0], data_tuple[1], int(data_tuple[2]), int(data_tuple[3]))

cls.cursor.execute(insert_sql)

cls.connect.commit()

@classmethod

defclose_db

(cls):

cls.cursor.close()

cls.connect.close()

建立爬蟲類

class

qsbkspider

(object):

def__init__

(self):

self.base_url = ""

# 設定user-agent

self.headers =

# 建立datatool類的物件,並在__init__()函式中完成對datatool類的物件引用

self.tool = datatool()

# 定義獲取網頁源**的函式

defget_origin_page_code

(self, page_num):

# page_num表示當前頁面的頁碼

abs_url = self.base_url + str(page_num)

# 建立request物件

request = urllib2.request(abs_url, headers=self.headers)

# 發出請求,獲取響應資料

try:

response = urllib2.urlopen(request)

except exception, e:

print

'連線失敗,原因是:',e

# 鏈結失敗

return

none

else:

# 響應成功,將網頁源**進行返回,交由下乙個函式進行資料的提取。

return response.read()

# 定義提取網頁資料的函式

defget_info_by_page_code

(self, html_string):

# 準備正規表示式

pattern = re.compile(r'.*?.*?.*?(.*?).*?.*?(.*?).*?(.*?)', re.s)

results_list = re.findall(pattern, html_string)

for data in results_list:

# 將data元組,傳遞到datatool類的函式引數中進行過濾,得到乙個新的元組。

res_tuple = self.tool.update_res(data)

# print '暱稱:', res_tuple[0]

# print '內容:', res_tuple[1]

# print '好笑數:{}個'.format(res_tuple[2])

dbmanager.insert_data(res_tuple)

if __name__ == '__main__':

# 鏈結資料庫

dbmanager.db_and_cursor()

qsbk_spider = qsbkspider()

for x in xrange(1,3):

html_string = qsbk_spider.get_origin_page_code(x)

if html_string != none:

qsbk_spider.get_info_by_page_code(html_string)

# 關閉資料庫

dbmanager.close_db()

糗事百科 三

爸,老師讓你去學校一趟。你又闖什麼禍了!打。打抱不平來著。打抱不平?常言道虎父無犬子,真不愧是我兒子 老師 看你兒子把鮑步平小朋友打的!怎麼陪吧!記得前一陣熱播民兵葛二蛋,然後我們全家都姓葛.割了一把心酸淚.中午吃飯的時候弟弟特委屈的問我,姐姐為什麼我們全班都叫我葛二蛋?t t 我一口飯沒嚥下去,心...

爬蟲實戰 糗事百科

閒來無聊,在網上按照教程寫了乙個python爬蟲,就是竊取資料然後儲存下來爬蟲實戰 糗事百科。從糗百上爬取段子,然後輸出到console,我改了一下儲存到了資料庫。不扯沒用的,直接上 這是爬取得部分 usr bin python coding utf 8 import urllib import u...

python爬蟲糗事百科

coding utf 8 import urllib2 import re 工具類 class tools object remove n re.compile r n replace br re.compile r remove ele re.compile r re.s rs 引數,要進行替換的...