当前位置:   article > 正文

【Python】使用Django框架/爬取百度搜索内容/存入数据库/并在前台页面进行展示/_h2 数据库 python django

h2 数据库 python django

一、创建新项目

创建一个Django Web项目,创建完成后我们可以查看下项目的目录结构:

|-- 项目名称
| |-- init.py                 一个命令行工具,可让你以各种方式与该 Django 项目进行交互。
| |-- settings.py          该 Django 项目的设置/配置。
| |-- urls.py                 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
| |-- wsgi.py               一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
|-- manage.py           一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。

在项目中创建一个工程,创建完成后我们可以查看下项目的目录结构:

.
|-- 项目名称
| |-- init.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
|-- 工程名称
| |-- migrations
| |-- templates
| |-- init.py
| |-- admin.py
| |-- apps.py
| |-- models.py
| |-- tests.py
| |-- views.py
|-- manage.py

将工程名添加到setting.pyINSTALLED_APPS

INSTALLED_APPS = [
    # Add your apps here to enable them
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
	'django_web'#工程名称
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二、配置数据库

1、数据库连接

setting.py中作以下修改:

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
		'ENGINE': 'django.db.backends.mysql',#使用mysql数据库进行连接
        'NAME':'mysql',#数据库的名字
		'USER':'root',#连接名
		'PASSWORD':'root',#连接密码
		'HOST':'127.0.0.1',
		'PORT':'3306',
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、创建数据表

在工程目录下的models.py中添加如下代码:

class message(models.Model):
    title = models.TextField()
    url = models.TextField()
  • 1
  • 2
  • 3

在数据库中创建一个名为message的数据表。
运行manger命令创建表:

manage makemigrations
manage migrate

三、添加视图文件

view.py中添加如下代码:
    这里使用的是beautifulsoup4来进行爬取数据

def search(request):
	if request.method == "POST":
		keyword = request.POST.get("search", None)#获取关键字
		pnum = int(request.POST.get("pn", None))#获取页码,将字符串转成数字
		if pnum==1:
			pnum=1
		else:
			pnum=pnum*10

		pn=str(pnum)
		# 打开数据库连接
		db = pymysql.connect("localhost", "root", "root", "mysql", charset='utf8' )
		# 使用cursor()方法获取操作游标 
		cursor = db.cursor()

		headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'}
		url='https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd='+keyword+'&pn='+pn
		res=requests.get(url=url,headers=headers)
		res.encoding='utf-8'
		soup=BeautifulSoup(res.text,'html.parser')
		for item in soup.select('.t'):
			title=item.select('a')[0].text
			url=item.select('a')[0]['href']
			twz = models.message.objects.create(title=title, url=url)#需要修改--已修改
			twz.save()

		# 关闭数据库连接
		db.close()
	return render(request,'search.html')



#定义展示函数
def list(request):
    list = models.message.objects.all()
    return render(request, 'show.html', {"list":list})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

四、前台页面的编写

在templates文件夹中添加search.htmlshow.html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>查询页</title>
    <script>
	function openResult(){    /* 绑定事件 */
		var r = confirm("查询成功!")
		if (r == true) {
		//window.location.href="F:\MyPythonWorkSpace\pc\pc\django_web\templates\show.html"
		} else {
			
		}
	} 
    </script>
</head>
<body>
    <h3 align="center">搜索页</h3>
    <form action="/search/" method="post"> {% csrf_token %}
        <table align="center" style="width: 300px;height:150px">
            <tr>
                <td align="center">关键字:</td>
                <td><input type="text" name="search" placeholder="请输入关键字"></td>
            </tr>
            <tr>
                <td align="center">页码:</td>
                <td><input type="text" name="pn" id="pnum" placeholder="请输入查询页数" onblur="check()">
                <script>
                    function check() {    /* 绑定事件 */
                        var num = document.getElementById("pnum").value;
                        if (isNaN(num)) {
                            alert("不是数字,请重新输入");
                        }
	                }
                </script>
                <span id="tishi"></span></td>
            </tr>
            <tr>
                <td align="center" colspan="2"><input type="submit" value="搜索" onclick="openResult()"></td>
            </tr>
        </table>
    </form>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
<html>
<head>
    <meta charset="UTF-8">
    <title>展示页</title>
</head>

<body>

<h3 align="center">展示页</h3>
    <table align="center" border="1">
    <tr>
        <th>i d</th>
        <th>标题</th>
        <th>链接</th>
    </tr>
    {% for line in list %}
    <tr>
        <td>{{line.id}}</td>
        <td>{{line.title}}</td>
        <td>{{line.url}}</td>
    </tr>
    {% endfor %}
    </table>

</body>
</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

五、URL声明

url.py中添加如下代码:

"""
Definition of urls for pc.
"""

from django.conf.urls import include, url
from django.contrib import admin
from django_web import views


urlpatterns = [
	url(r'^search/$',views.search),
    url(r'^show/$',views.list),
    url(r'^admin/', admin.site.urls),
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

六、运行项目

search页面
show页面,此界面为输入python关键字的查询结果界面。

七、编写中出现的问题

1、主页显示问题

运行项目会出现下面的页面,需要手动在网址后面输入"/search.html"或"/show.html"进行访问。
在这里插入图片描述
解决方法:

1.在views中添加一个显示主页的函数
def homepage(request):
response=render(request,“search.html”);
return response

2.在urls.py中添加
url(r’^$’,views.homepage),

2、数据库的使用

    好像python3.7以前使用mysqldb,以后使用pymysql,我在pip安装mysqldb的时候就提示错误,pip install pymysql就可以。
    如果要使用pymysql,则需要进行配置:在__init__.py中添加如下代码来替换mysqldb:

import pymysql
pymysql.install_as_MySQLdb()
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/723156
推荐阅读
相关标签
  

闽ICP备14008679号