说明

在Github上创建两个仓库,一个私库存放博客源码,一个用户名.github.io存放生成的public文件,使用VSCode编写markdown格式博文推送到私库即可自动部署到用户名.github.io。

演示:Sky's Blog

创建ssh密钥对

$ ssh-keygen -f github-deploy-key
  • 打开 用户名.github.io 的仓库,点击 setting / deploy key ,然后点击 add new key,名称填写 HEXO_DEPLOY_PUB ,值填写上一步生成的公钥(.pub文件)里面的内容,然后勾选 allow write,提交。
  • 打开私库,添加 setting / secrets / add new key,名称为 HEXO_DEPLOY_PRI,值为生成ssh密钥对之私钥内容,提交。

创建 github action workflow

在私库中点击 Actions,新建一个workflow。

name: HEXO CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [10.x]
    steps:
      - uses: actions/checkout@v1
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Configuration environment
        env:
          HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
        run: |
          mkdir -p ~/.ssh/
          echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          git config --global user.name "设置用户名"
          git config --global user.email "设置邮箱"
      - name: Install dependencies
        run: |
          npm i -g hexo-cli
          npm install hexo-deployer-git --save
          npm i
      - name: Generate static blog file
        run: |
          hexo generate
      - name: Deploy to github page
        run: |
          hexo deploy

修改私库中部署地址

deploy:
  type: git
  repo: git@github.com:username/username.github.io.git
  branch: master

绑定域名

在私库博客源文件source文件夹中新建一个CNAME的文件,内容为你要绑定的域名,然后在域名服务商处解析域名cname到username.github.io。

部署

在私库源文件source/_posts中添加md格式的博文,然后push,即可自动部署成功。

安装完 npm install -g @vue/cli

出现以下错误

vue : 无法加载文件 C:UsersxxxAppDataRoamingnpmvue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go .microsoft
Google之,以下方法解决之:

  1. 以管理员身份运行PowerShell
  2. 执行:get-ExecutionPolicy,回复Restricted,表示状态是禁止的。
  3. 执行:set-ExecutionPolicy RemoteSigned
  4. 选择Y
    :一定要以管理员的身份运行PowerShell,不是cmd窗口!

via:998ip

说明

最近需要用到一些HTTP的代理,用于爬虫去爬取信息,搜索了一些网站,貌似现在这类提供免费代理IP的网站很多,刚好最近看了点vue的视频,弄个网站练练。

部署到heroku,预览地址:点击这里

FastAPI

  • 安装相关依赖
pip install uvicorn fastapi requests bs4 jinja2 aiofiles
  • 一个简单的函数爬取代理
def Spider(cat):
    url = '目标网站'
    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"}
    try:
        res = requests.get(url,headers=headers)
        res.encoding = "utf-8"
        soup = BeautifulSoup(res.text, 'html.parser')
        html = soup.select(’bs4‘)
        return html[0]
    except:
        return 'error'
  • 前台点击按钮触发爬虫,返回数据
@app.get("/{cat}")
async def regist(cat):
    if spider(ip) == 'error':
        return '服务器繁忙,暂时无法获取IP,请稍后再试!<br> 需要购买收费服务可联系:<a href="http://www.xhuosoft.cn">薪火代理</a>'
    return str(spider(ip))

VUE

  • 引用vue和axios
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script>
  • 按钮触发请求返回数据
@click 
  • 由于返回的数据是HTML格式的,这里直接用v-html

Heroku

  • 注册账号
  • 下载并安装heroku-cli
  • 创建应用
  • 本地代码
  • 上传代码

Profile 里面写 web:uvicorn main:app之类即可

案例地址:998ip

爬取即时线报,通过vue.js和axios.js调用fastapi相关数据到html页面进行展示。

效果展示:最新线报

Heroku

  • 注册heroku
  • 安装heroku cli
mkdir haoyangmao && cd haoyangmao
git init
heroku git:remote -a haoyangmao

线报采集

用python写一个简单的爬虫,大致代码如下,四个目标网站,利用requests+lxml库获取目标网站线报的url和title并写入数据库,如果采集频率比较高的话可以使用代理IP www.xhuosoft.cn,requests.get添加一个proxies就可以。

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)
                
    def spider_kxd(self):
        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)

如果需要采集之后推送到微信群使用wxpy库即可。

fastapi

fastapi字面意思是一个快的api库,通过fastapi将线报信息转换为api接口,通过网页进行调用。
大致代码如下:

@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进行数据交互。

部署

创建一个Procfile,内容如下:

web: gunicorn -w 3 -k uvicorn.workers.UvicornWorker main:app

创建一个requirements.txt,内容为你所项目所使用的各类依赖库。
创建一个runtime.txt,内容写python的版本即可。

具体最终效果看这里

使用的库

  • bs4
  • requests
  • pymongo
  • fastapi
  • uvicorn

爬取ip

网络上搜索一下有很多提供HTTP代理的网站,直接使用BeautifulSoup将IP爬下来。

html =requests.get(url).text
bs =BeautifulSoup(html,'html.perser')
#findAll()
#select()

验证ip

res = requests.get(url,headers=headers,proxies=proxies)
#判断res.status_code是否等于200
#db.insert_one()

如果验证成功写入数据库。

接口

使用fastapi

@app.get('/api')
def api():
    data = 查询数据库随机返回一条
    return data

效果展示

https://zhaoip.xyz
https://www.ipzdc.com

演示地址:找IP