import requests, sqlite3, re
class processdatatool(object):
"""資料處理的工具類:工具類中一般不寫__init__初始化屬性,只封裝工具方法對資料進行操作。工具類中的方法一般是以工具類居多。
"""@classmethod
def process_data(cls,data_tuple):
"""對原始的元組資料處理完成,返回乙個新的元組
:param data_tuple:
:return:
"""# print(data_tuple)
# 經過輸出,發現使用者暱稱和段子內容需要處理特殊字元,將\n和
從原始字串中刪除。
p1 = re.compile(r'\n',re.s)
p2 = re.compile(r'
',re.s)
nick_name = data_tuple[0]
# 利用p1這個正規表示式,從nick_name字串中匹配\n,並將其替換為''這個空字串
nick_name = re.sub(p1, '', nick_name)
content = data_tuple[2]
content = re.sub(p1, '', content)
# 處理內容中的
content = re.sub(p2,'',content)
return (nick_name,data_tuple[1],content,data_tuple[3],data_tuple[4])
class dbtool(object):
"""資料庫工具類
"""connect = cursor = none
@classmethod
# 鏈結資料庫
def connect_cursor(cls):
cls.connect = sqlite3.connect('qsbk.db')
cls.cursor = cls.connect.cursor()
@classmethod
# 插入資料
def insert_data(cls,data):
insert_sql = 'insert into qsbk (nick_name, level, content, smail_count,comment_count) values (?, ?, ?, ?, ?)'
cls.cursor.execute(insert_sql,data)
cls.connect.commit()
@classmethod
# 關閉資料庫
def close_connect_cursor(cls):
cls.cursor.close()
cls.connect.close()
class qsbkspider(object):
"""爬蟲類
"""def __init__(self):
def get_list_page(self,page_num):
"""獲取列表頁源**
:param page_num: 頁碼
:return:
"""url = ''
try:
url = ''.format(page_num)
response = requests.get(url,headers=self.headers)
if response.status_code == 200:
# 返回網頁源**字串,交給下乙個函式進行解析
return response.text
else:
# 202:表示對方伺服器已經成功接收了get請求,但是並沒有給與響應,如果多次嘗試一直都是202,說明了遭遇反爬蟲的限制。
return none
except exception as e:
print('當前url:{}請求異常,異常原因:{}'.format(url,e))
return none
def parse_list_page(self,html):
"""解析列表頁源**
:param html: 頁碼
:return:
"""pattern = re.compile(r'.*?.*?(.*?)
.*?(.*?).*?.*?(.*?).*?.*?(.*?)', re.s)
datas = re.findall(pattern,html)
for data_tuple in datas:
# 將原始資料交給工具類進行資料的整理。
new_data_tuple = processdatatool.process_data(data_tuple)
# print(new_data_tuple)
dbtool.insert_data(new_data_tuple)
if __name__ == '__main__':
dbtool.connect_cursor()
spider = qsbkspider()
html = spider.get_list_page(1)
if html:
spider.parse_list_page(html)
else:
pass
dbtool.close_connect_cursor()
爬取糗事百科段子
user bin env python coding utf 8 author holley file baike1.py datetime 4 12 2018 14 32 description import requests import re import csv from bs4 impor...
Scrapy 爬取糗事百科段子
1.python爬蟲實戰一之爬取糗事百科段子 2.在工作目錄建立myproject scrapy startproject myproject3.編寫 myproject myproject items.py coding utf 8 define here the models for your ...
爬取糗事百科,朗讀段子
一閒下來就不務正業了,寫個爬蟲,聽段子。額,mac自帶的語音朗讀,windows我就不知道啦,有興趣的可以去研究一下哈。環境 python 2.7 mac os 10.12 使用朗讀的 from subprocess import call call say hello pengge 當然了,聽起來...