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

本文详细介绍了如何从零开始搭建一个Django Web项目,包括项目与应用的创建、数据库配置、模型定义、视图函数编写、URL声明及前端页面设计。并通过一个具体的例子展示了如何使用BeautifulSoup进行网页数据爬取并存储到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建新项目

创建一个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、数据库连接

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',
    }
}

2、创建数据表

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

class message(models.Model):
    title = models.TextField()
    url = models.TextField()

在数据库中创建一个名为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})

四、前台页面的编写

在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>
<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>

五、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),
]

六、运行项目

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()
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值