python爬虫与django_请问django和爬虫程序如何整合?
Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。
本节的最后有源代码,但建议初学者按照代码操作,有问题再下载源代码和自己的代码进行比较。
多动手,这是学习编程最好的方法!
1. 新建项目和应用
django-admin.py startproject learn_models # 新建一个项目
cd learn_models # 进入到该项目的文件夹
django-admin.py startapp people # 新建一个 people 应用(app)
补充:新建app也可以用 python manage.py startapp people, 需要指出的是,django-admin.py 是安装Django后多出的一个命令,并不是运行的当前目录下的django-admin.py(当前目录下也没有),但创建项目会生成一个 manage.py 文件。
那project和app什么关系呢?
一个项目一般包含多个应用,一个应用也可以用在多个项目中。
2. 添加应用
将我们新建的应用(people)添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'people',
)
3. 修改models.py
我们打开 people/models.py 文件,修改其中的代码如下:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
我们新建了一个Person类,继承自models.Model, 一个人有姓名和年龄。
这里用到了两种Field,更多Field类型可以参考教程最后的链接。
4. 创建数据表
我们来同步一下数据库(我们使用默认的数据库 SQLite3,无需配置)
先 cd 进入 manage.py 所在的那个文件夹下,输入下面的命令
# Django 1.6.x 及以下
python manage.py syncdb
# Django 1.7 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
Django 1.6.x 以下版本 显示大概如下:
Django 1.7.x 以上版本的同学会看到
我们会看到,Django生成了一系列的表,也生成了我们新建的people_person这个表,那么如何使用这个表呢?
5. 使用 Django 提供的 QuerySet API
Django提供了丰富的API, 下面演示如何使用它。
$ python manage.py shell
>>> from people.models import Person
>>> Person.objects.create(name="WeizhongTu", age=24)
>>>
我们新建了一个用户WeizhongTu 那么如何从数据库是查询到它呢?
>>> Person.objects.get(name="WeizhongTu")
>>>
我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示,这里并没有显示出与WeizhongTu的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 people/models.py
name 和 age 等字段中不能有 __(双下划线,因为在Django QuerySet API中有特殊含义(用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等)
也不能有Python中的关键字,name 是合法的,student_name 也合法,但是student__name不合法,try, class, continue 也不合法,因为它是Python的关键字( import keyword; print(keyword.kwlist) 可以打出所有的关键字)
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
def __unicode__(self):
# 在Python3中使用 def __str__(self):
return self.name
按 CTRL + C 退出当前的 Python shell, 重复上面的操作,我们就可以看到:
新建一个对象的方法有以下几种:
Person.objects.create(name=name,age=age)
p = Person(name="WZ", age=23)
p.save()
p = Person(name="TWZ")
p.age = 23
p.save()
Person.objects.get_or_create(name="WZT", age=23)
这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
获取对象有以下方法:
Person.objects.all()
Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
Person.objects.get(name=name)
get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人
Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写
Person.objects.filter(name__regex="^abc") # 正则表达式查询
Person.objects.filter(name__iregex="^abc") # 正则表达式不区分大小写
filter是找出满足条件的,当然也有排除符合某条件的
Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的
python爬虫与django_请问django和爬虫程序如何整合?相关推荐
- python接口开发django_用 Django 开发接口
环境搭建 1.pip install django==2.2.0 一. django-admin startproject UITEST python manage.py startapp paltf ...
- python中运用django_【Django】在项目中使用python
将博客代码提交到仓库的时候,也许不经意间会将你不想泄漏的信息(比如数据库url,密码,密钥,调试状态,电子邮件主机,允许的主机等等)暴露.所以我们需要考虑,将我们的信息保存在安全的地方(比如直接保存在 ...
- python爬虫库的功能_Python学习爬虫掌握的库资料大全和框架的选择的分析
学Python,想必大家都是从爬虫开始的吧.毕竟网上类似的资源很丰富,开源项目也非常多. Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 当我们在浏览器中输入一个url后回车,后台会发生 ...
- python import request 不报错_爬虫学习路径整理及安装环境遇到的坑
学习路径是我自己提炼和精选的,只适合我个人,因为虽然有技术基础但是我刚入门爬虫视野很窄不专业,为避免误导你们,你们最好参考知乎上大牛已经回答的好答案.我发这篇文章,目的是给自己看的.ps,专栏下每篇文 ...
- python分布式爬虫系统_三种分布式爬虫系统的架构方式
分布式爬虫系统广泛应用于大型爬虫项目中,力求以最高的效率完成任务,这也是分布式爬虫系统的意义所在. 分布式系统的核心在于通信,介绍三种分布式爬虫系统的架构思路,都是围绕通信开始,也就是说有多少分布式系 ...
- python获取id标签对应数据_Python--Scrapy爬虫获取简书作者ID的全部文章列表数据
最近Python大火,为了跟上时代,试着自学了下.Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 今天我们就试着用Scra ...
- 网站爬取工具_Python项目:结合Django和爬虫开发小说网站,免安装,无广告
前言 很多喜欢看小说的小伙伴都是是两袖清风的学生党,沉迷小说,不能自拔.奈何囊中甚是羞涩,没有money去看正版小说,但是往往这些免费的小说网站或者小说软件,随之而来的是大量的广告. Python嘛, ...
- python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
python商品数据分析可视化系统(带爬虫)京东销售数据分析 一.开发技术 pycharm.MySQL数据库/sqlite3数据库.Python3.x版本.Django框架 二.功能 用户注册.登录. ...
- 超全的Python完全版电子书——从基础到爬虫、分析等高级应用,限时下载
python3.11即将于下半年发布,新的版本速度提升2倍,以弥补与其他编程语言在速度上的缺陷.可以预见Python语言在未来的应用范围会越来越广. python学习方向建议: 如果你是本科及以下学历 ...
最新文章
- Spring Cloud第一篇:服务注册与发现Eureka
- 这所211大学,迎来80后女科学家任副校长
- Java8的Optional是不是鸡肋?
- 推动大数据和AI应用场景的落地,加速实现与产业融合。
- 角点检测:Harris角点及Shi-Tomasi角点检测
- ubuntu安装远程桌面连接工具
- 目标检测系列(七)——CornerNet:detecting objects as paired keypoints
- kotlin访问控制符可见性
- 还在买白酒?算法工程师们,量化投资了解一下
- Python科学库sklearn.numpy.scipy. matplotlib.pandas
- 数据结构笔记-----树
- c语言只中原子变量含义,c语言中的原子操作 - osc_bkg5rgl1的个人空间 - OSCHINA - 中文开源技术交流社区...
- 单例(Singleton)设计模式
- 使用Flash在线制作头像
- gnu grub修复_linux命令:grub 文件详解及grub修复,系统常见故障修复
- 什么是缺陷密度?计算的公式及示例
- linux ps结果解析,Linux笔记-ps -aux的结果解析
- KJ1570矿用人员定位系统,煤安认证更安全
- 论文整理Actively Mapping Industrial Structures with Information Gain-Based Planning on a Quadruped Robot
- cad2016中选择全图字体怎么操作_ps创意字体设计教程:ps怎么做海报漂亮字体
热门文章
- 系统分析师和系统架构设计师难度比较_系统架构设计师,马上开课了!
- php引号变量_下列PHP数据库insert语句中变量前后的点和双引号有什么作用?
- 传统蒙文字体_蒙古要改回使用传统回鹘蒙文,这是种什么文字,蒙古为什么要改回...
- 新版谷歌浏览器开启Flash支持
- 【Python爬虫学习笔记12】Ajax数据爬取简介
- C艹 指针和const的关系和注意事项(非常有意思)
- 返回表达式列表中最小值least(exp1,exp2,exp3,……,expn)
- 更新SQL Server实例所有数据库表统计信息
- mac地址漂移flapping的前因后果
- 适用响应式 Web UI 框架