
无需加好友免费技术支持
环境建设表明:
抓取数据信息
要做一个小说网址,具体内容是非常必要的。最先,我们将要小说集《星星变》爬上去数据库。
创建一个简单的数据库表:
CREATE TABLE `novel` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 自增主键,
`title` varchar(100) NOT NULL COMMENT "文章标题",
`content` text NOT NULL COMMENT "具体内容",
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
组装数据库推动和连接池:
# 数据库推动
pip install pymysql
# 数据库连接池
pip install DBUtils
代码完成:
# -*- coding: UTF-8 -*-
# 导入requests库
import requests
# 导入文件实际操作库
import codecs
from bs4 import BeautifulSoup
import sys
import mysql_DBUtils
from mysql_DBUtils import MyPymysqlPool
import importlib
importlib.reload(sys)
# 特定要求仿真模拟chrome浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
server = ""
# 星辰变详细地址
book = ""
# 界定DB
mysql = MyPymysqlPool("dbMysql")
# 获得章节具体内容
def get_contents(chapter):
req = requests.get(url=chapter)
html = req.content
html_doc = str(html, "gbk")
bf = BeautifulSoup(html_doc, "html.parser")
texts = bf.find_all("div", id="content")
# 获得div标签id属性content的具体内容 xa0 是不间断地空白符
content = texts[0].text.replace("xa0" * 4, "
")
return content
# 载入数据库
def write_db(chapter, content):
sql = "INSERT INTO novel (title, content) VALUES(%(title)s, %(content)s);"
param = {"title": chapter, "content": content}
mysql.insert(sql, param)
# 主方式
def main():
res = requests.get(book, headers=headers)
html = res.content
html_doc = str(html, "gbk")
# 应用内置的html.parser分析
soup = BeautifulSoup(html_doc, "html.parser")
# 获得全部章节
a = soup.find("div", id="list").find_all("a")
print总章节数: %d " % len(a))
for each in a:
try:
chapter = server each.get("href")
content = get_contents(chapter)
chapter = each.string
write_db(chapter, content)
except Exception as e:
print(e)
mysql.dispose()
if __name__ == "__main__":
main()
详细大量代码:
私聊007可得到意外惊喜豪礼哦!
创建项目
# 组装Web架构
pip install Django
# 创建一个项目
python django-admin.py startproject itstyle
# 转换文件目录
cd itstyle
# 创建App
python manage.py startapp novel
一般有好几个项目app, 自然通用性的app可用于好几个项目,随后启动服务:
# 默认端口是8000
python manage.py runserver
假如提醒端口被占用,可以用别的端口号:
python manage.py runserver 8001
项目构造
最后代码如下所示:
│ manage.py
│
├─novel
│ │ settings.py # 基本配备
│ │ urls.py # URL投射
│ │ wsgi.py
│ │ __init__.py
│ │
│
├─templates # 有关网页页面
│ novel.html # 章节
│ novel_list.html # 小说集主页
│
├─utils
│ │ dbMysqlConfig.cnf # 数据库配置参数
│ │ encoder.py # 编号类
│ │ mysql_DBUtils.py # 数据库连接池
│
└─view
│ index.py # 后台管理业务流程
关键点备注名称
RESTful 设计风格
控制板 urls.py
from django.conf.urls import url
from django.urls import path
from view import index
urlpatterns = [
# 《星辰变》主页List
path("", index.main), # new
# 章节网页页面 正则匹配
path("chapter/
]
代码完成
from django.http import HttpResponse
from django.shortcuts import render
import utils.mysql_DBUtils
from utils.mysql_DBUtils import MyPymysqlPool
from utils.encoder import MyEncoder
import json
mysql = MyPymysqlPool("dbMysql")
# 章节目录《星辰变》
def main(request):
# 这儿读10一篇文章,提升分页查询
sql = "SELECT id,title FROM novel LIMIT 10;"
result = mysql.getAll(sql)
# 汉语转换格式
result = json.dumps(result, cls=MyEncoder, ensure_ascii=False, indent=4)
result = json.loads(result)
context = {"novel_list": result}
return render(request, "novel_list.html", context)
"""
浏览单章
这里 novel_id 相匹配 urls.py 里的
可浏览:
"""
def chapter(request, novel_id):
sql = "SELECT title,content FROM novel where id = %(id)s;"
param = {"id": novel_id}
result = mysql.getOne(sql, param)
result["title"] = result["title"].decode("utf-8")
result["content"] = result["content"].decode("utf-8")
context = {"novel": result}
return render(request, "novel.html", context)
列表展示
根据后面回到统计数据显示在前台接待。在这儿你不难想象它Java中的Struts2标识或是JSTL自然,标识有点Vue的意思:
{% for novel in novel_list %}
{% endfor %}
总结
到现在为止,一个简单的Web项目原形已完成。自然,有很多地方必须提升。假如项目进行,应当有3个w快到手了!路还长,还必须努力!