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 引數,要進行替換的...