[toc]原理解析
B站最近使用BV号取代了原有的AV号,👴的青春结束了,为了找回青春特地编写该程序。
任意打开B站的一个视频,可以发现URL栏已经变成了BV号
但是输入原来的AV号依然可以访问比如av170001
查看网页的源代码,可以看到在箭头处看到第一行的AV号以及下一行的封面图链接
最后根据表单提供的BV号返回对应的AV号和封面图链接即可
[toc]准备工作
-
安装Python3.6以上并下载pip
-
安装项目所需要的第三方库
pip install django #安装Django框架的库
pip install requests #安装爬虫所需要的库
- 创建Django项目与APP
django-admin startproject BiliBili #创建项目
cd BiliBili #进入项目
django-admin startapp Get #创建APP
[toc]Django配置
- 在settings.py配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Get',
]
- 在Get文件夹中创建三个文件夹
Rep # 存放Python爬虫文件
static #存放CSS JS IMG文件
templates #存放html文件
- 创建reptile.py文件(爬虫代码)
import re
import requests
url = "https://www.bilibili.com/video/"
def get_html(bv):
htmlurl = url+bv
html = requests.get(htmlurl)
html = html.text
img = re.findall(r'<meta data-vue-meta="true" itemprop="image" content="(.*?)">', html, re.S)
av = re.findall(r'<meta data-vue-meta="true" itemprop="url" content="https://www.bilibili.com/video/(.*?)/">', html, re.S)
return av[0], img[0]
- 配置views.py文件
from django.shortcuts import render
from .Rep import reptile as rep
# Create your views here.
def get_html(request):
if request.method == 'POST':
name = request.POST.get('text')
av, img = rep.get_html(name)
return render(request, template_name='index.html', context={
'av': av, 'img': img
})
return render(request, 'index.html')
- 配置urls.py文件
from django.contrib import admin
from django.urls import path
from Get import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.get_html),
]
- 配置setting.py文件(位于最下面)
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
- 配置index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello</h1>
<form action="/" method="post">
{% csrf_token %}
<input type="text" name="text" value="">
<input type="submit" value="提交">
</form>
<h2>该视频的av号为{{av}}</h2>
<img src="{{img}}">
</body>
</html>
关于Django配置的一些参数可以看之前的博客
运行
python runserver manage.py 0.0.0.0:8000
#0.0.0.0 可以在网络中被访问
#8000指定端口号
[toc]效果图
[toc] 常见问题
Python版本问题
Linux中内置Python2所以需要更新,而更新后例如宝塔等依赖还需要Python2支持,所以在输入命令时需要将python改成python3
Django版本问题
使用pip直接下载Django后,启动运行会报错,所以可降低版本
pip install django==2.1.8
提交表单出现403错误
是因为post提交时为了防止CSRF攻击,需设置一个Token来验证
在表单代码中加入**{% csrf_token %}**
样例代码已加入
python manage.py migrate’ to apply them.错误
输入命令
python manage.py migrate
如有错误,感谢各位大佬指出