爬取即時線報,通過vue.js和axios.js調(diào)用fastapi相關(guān)數(shù)據(jù)到html頁面進行展示殴泰。
效果展示:最新線報
Heroku
- 注冊heroku
- 安裝heroku cli
mkdir haoyangmao && cd haoyangmao
git init
heroku git:remote -a haoyangmao
線報采集
用python寫一個簡單的爬蟲昭娩,大致代碼如下咧欣,四個目標(biāo)網(wǎng)站臭墨,利用requests+lxml庫獲取目標(biāo)網(wǎng)站線報的url和title并寫入數(shù)據(jù)庫藏鹊,如果采集頻率比較高的話可以使用代理IPwww.xhuosoft.cn润讥,requests.get添加一個proxies就可以。
kxd_api = 'https://www.kxdao.net/forum-42-1.html'
wgzj_api = 'http://www.wgzj.cn/bbs/forum-2-1.html'
xb0818_api = 'http://www.0818tuan.com/list-1-0.html'
leyu_api = 'https://bbs.leyuz.net/f/xianbao'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
class Spider(object):
def __init__(self,url=None):
if url!=None:
self.url = url
self.res = requests.get(url,headers=headers)
#self.res.encoding = "utf-8"
self.soup = etree.HTML(self.res.text)
#科學(xué)刀最新線報
def spider_kxd(self):
site = '科學(xué)刀'
soup = Spider(kxd_api).soup
for soup_a in soup.xpath('//a[@class="s xst"]'):
title = soup_a.text
link = soup_a.get('href')
if Message.get_or_none(Message.link==link):
pass
else:
Message.create(title=title,link=link,site=site)
如果需要采集之后推送到微信群使用wxpy庫即可盘寡。
fastapi
fastapi字面意思是一個快的api庫楚殿,通過fastapi將線報信息轉(zhuǎn)換為api接口,通過網(wǎng)頁進行調(diào)用竿痰。
大致代碼如下:
@app.get("/xb/")
def xb(request: Request):
p = Message.select(Message.title,Message.link).order_by(Message.pubtime.desc()).limit(10)
data = []
for q in p:
msg = {'title':q.title,'link':q.link}
data.append(msg)
return data
Vue.js
前端使用vue.js和axios.js與fastapi進行數(shù)據(jù)交互脆粥。
部署
創(chuàng)建一個Procfile,內(nèi)容如下:
web: gunicorn -w 3 -k uvicorn.workers.UvicornWorker main:app
創(chuàng)建一個requirements.txt影涉,內(nèi)容為你所項目所使用的各類依賴庫变隔。
創(chuàng)建一個runtime.txt,內(nèi)容寫python的版本即可蟹倾。
具體最終效果看這里