再次順手寫了一個爬蟲,把數(shù)據(jù)存在數(shù)據(jù)庫。然后利用time date模塊分析了每天的發(fā)帖數(shù),利用charts做成表格。
要點(diǎn):
1.爬蟲,requests,beautifulSoup的css選擇器
2.py連接數(shù)據(jù)庫操作insert_one,find({},{}),update()等
3.charts表格使用,折現(xiàn)type:line,很方便。
4.time date模塊,理解了datetime是一個時間的類,timetelta是時間間隔,strptime,strftime,now等函數(shù)。詳見<a >廖雪峰datetime部分</a>
import requests,datetime,pymongo,charts
from bs4 import BeautifulSoup
client = pymongo.MongoClient('localhost',27017)
tieba = client['tieba']
time_list = tieba['time_list']
time2_list = tieba['time2_list']
#把日期存入數(shù)據(jù)庫
'''
start_url = 'https://tieba.baidu.com/p/5062169335?pn='
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'
}
for i in range(1,14):
try:
url = start_url + str(i)
r = requests.get(url,timeout = 20,headers = headers)
r.raise_for_status()
except:
print('erroe')
soup = BeautifulSoup(r.text,'lxml')
date = soup.select('div.post-tail-wrap > span:nth-of-type(4)')
for each in date:
time_list.insert_one({'date':each.text[:10]})
'''
#把數(shù)據(jù)從數(shù)據(jù)庫取出處理
index_time = []
count_time = []
start_day = datetime.date(2017,4,8)
end_day = datetime.date(2017,5,6)
days = datetime.timedelta(days=1)
while start_day <= end_day:
index_time.append(start_day.strftime('%Y-%m-%d'))
start_day +=days
#print(index_time)
for date in index_time:
a = list(time_list.find({'date':date}))
count_time.append(len(a))
#print(count_time)
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '發(fā)帖量統(tǒng)計'},
'subtitle': {'text': '可視化統(tǒng)計圖表'},
'xAxis' : {'categories': index_time},
'yAxis' : {'title': {'text': '數(shù)量'}}
}
series = [{'data':count_time,'name':'在所有物是人非的','type':'line'}] #只統(tǒng)計了一個貼吧,可以統(tǒng)計多個貼吧,畫多條曲線
charts.plot(series,show = 'inline',options=options)
結(jié)果,由于charts是由js生成的,可以放大縮小觀看曲線,但不能保存,只能夠截個圖來看看了

圖片.png