日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫与django_请问django和爬虫程序如何整合?

發布時間:2025/3/11 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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和爬虫程序如何整合?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。