欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django-Scrapy生成后端json接口的方法示例

 更新時間:2020年10月06日 08:38:07   作者:歡迎來到xbhog博客  
這篇文章主要介紹了Django-Scrapy生成后端json接口的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

網上的關于django-scrapy的介紹比較少,該博客只在本人查資料的過程中學習的,如果不對之處,希望指出改正;

以后的博客可能不會再出關于django相關的點;

人心太浮躁,個人深度不夠,只學習了一些皮毛,后面博客只求精,不求多;

希望能堅持下來。加油!

學習點:

  • 實現(xiàn)效果
  • django與scrapy的創(chuàng)建
  • setting中對接的位置和代碼段
  • scrapy_djangoitem使用
  • scrapy數(shù)據(jù)爬取保存部分
  • 數(shù)據(jù)庫設計以及問題部分
  • django配置

實現(xiàn)效果:

django與scrapy的創(chuàng)建:

django的創(chuàng)建:

django startproject 項目名稱
cd 項目名稱
python manage.py startapp appname

例如:

scrapy的創(chuàng)建:

# cd django的根目錄下
cd job_hnting
scrapy startproject 項目名稱
#創(chuàng)建爬蟲
scrapy genspider spidername 'www.xxx.com'

例如:

 

setting的設置:

在scrapy框架中的setting指向django,讓django知道有scrapy;

在scrapy中的setting設置;

import os
import django

#導入
os.environ['DJANGO_SETTINGS_MODULE'] = 'job_hnting.settings'
#手動初始化
django.setup()

如:

scrapy_djangoitem使用:

pip install scrapy_djangoitem

該庫在scrapy項目下的item中編寫引入:

import scrapy
# 引入django中app中models文件中的類
from app51.models import app51data
# scrapy與django對接的庫
from scrapy_djangoitem import DjangoItem


class JobprojectItem(DjangoItem):
  #引用django下的model中的類名
  django_model = app51data

數(shù)據(jù)存儲部分對接在后面解釋,現(xiàn)在大體框架完整;

scrapy爬取保存部分:

首先編寫scrapy爬蟲部分:

我們選取的是51招聘網站的數(shù)據(jù):

爬取分為三個函數(shù):

  • 主函數(shù)
  • 解析函數(shù)
  • 總頁數(shù)函數(shù)

51job的反爬手段:

將json的數(shù)據(jù)格式隱藏在網頁結構中,網上教程需要別的庫解析(自行了解),

我們的方法是使用正則匹配提取定位到數(shù)據(jù)部分,使用json庫解析:

# 定位數(shù)據(jù)位置,提取json數(shù)據(jù)
    search_pattern = "window.__SEARCH_RESULT__ = (.*?)</script>"
    jsonText = re.search(search_pattern, response.text, re.M | re.S).group(1)

獲得關鍵字總頁數(shù):

# 解析json數(shù)據(jù)
    jsonObject = json.loads(jsonText)
    number = jsonObject['total_page']

在主函數(shù)中構造頁面url并給到解析函數(shù):

  for number in range(1,int(numbers)+1):
      next_page_url = self.url.format(self.name,number)
      # print(next_page_url)
      #構造的Urlcallback到data_parse函數(shù)中
      yield scrapy.Request(url=next_page_url,callback=self.data_parse)

最后在解析函數(shù)中提取需要的數(shù)據(jù):

 for job_item in jsonObject["engine_search_result"]:
      items = JobprojectItem()
      items['job_name'] = job_item['job_name']
      items['company_name'] = job_item["company_name"]
      # 發(fā)布時間
      items['Releasetime'] = job_item['issuedate']
      items['salary'] = job_item['providesalary_text']
      items['site'] = job_item['workarea_text']
      .......

相關的細節(jié)部分需要自己調整,完整代碼在 GitHub 中。

數(shù)據(jù)爬取部分解決后,需要到scrapy項目中的pipline文件保存;

class SeemeispiderPipeline(object):
  def process_item(self, item, spider):
    item.save()
    return item

記得在setting文件中取消掉pipline的注釋

設置數(shù)據(jù)庫:

Django配置數(shù)據(jù)庫有兩種方法:

方法一:直接在settings.py文件中添加數(shù)據(jù)庫配置信息(個人使用的)

DATABASES = {
  # 方法一
  'default': {
    'ENGINE': 'django.db.backends.mysql',  # 數(shù)據(jù)庫引擎
    'NAME': 'mysite',            # 數(shù)據(jù)庫名稱
    'USER': 'root',           # 數(shù)據(jù)庫登錄用戶名
    'PASSWORD': '123',        # 密碼
    'HOST': '127.0.0.1',        # 數(shù)據(jù)庫主機IP,如保持默認,則為127.0.0.1
    'PORT': 3306,              # 數(shù)據(jù)庫端口號,如保持默認,則為3306
  }
}

方法二:將數(shù)據(jù)庫配置信息存到一個文件中,在settings.py文件中將其引入。

新建數(shù)據(jù)庫配置文件my.cnf(名字隨意選擇)

[client]
database = blog
user = blog
password = blog
host =127.0.0.1
port = 3306
default-character-set = utf8

在settings.py文件中引入my.cnf文件

DATABASES = {
  # 方法二:
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'OPTIONS': {
      'read_default_file': 'utils/dbs/my.cnf',
    },
  }
}

啟用Django與mysql的連接

在生產環(huán)境中安裝pymysql 并且需要在settings.py文件所在包中的 __init__.py 中導入pymysql

import pymysql
pymysql.install_as_MySQLdb()

對應前面的item,在spider中編寫時按照model設置的即可;;

from django.db import models
# Create your models here.
#定義app51的數(shù)據(jù)模型
class app51data(models.Model):
  #發(fā)布時間,長度20
  Releasetime = models.CharField(max_length=20)
  #職位名,長度50
  job_name =models.CharField(max_length=50)
  #薪水
  salary = models.CharField(max_length=20)
  #工作地點
  site = models.CharField(max_length=50)
  #學歷水平
  education = models.CharField(max_length=20)
  #公司名稱
  company_name = models.CharField(max_length=50)
  #工作經驗
  Workexperience = models.CharField(max_length=20)
  #指定表名
  class Meta:
    db_table = 'jobsql51'

  def __str__(self):
    return self.job_name

當指定完表名后,在DBMS中只需要創(chuàng)建對應的數(shù)據(jù)庫即可,表名自動創(chuàng)建

每次修改數(shù)據(jù)庫都要進行以下命令:

python manage.py makemigrations
python manage.py migrate

到此mysql數(shù)據(jù)庫配置完成

配置數(shù)據(jù)庫時遇到的錯誤:

Django啟動報錯:AttributeError: 'str' object has no attribute 'decode'

解決方法:

找到Django安裝目錄

G:\env\django_job\Lib\site-packages\django\db\backends\mysql\operations.py

編輯operations.py;

將146行的decode修改成encode

def last_executed_query(self, cursor, sql, params):
    # With MySQLdb, cursor objects have an (undocumented) "_executed"
    # attribute where the exact query sent to the database is saved.
    # See MySQLdb/cursors.py in the source distribution.
    query = getattr(cursor, '_executed', None)
    if query is not None:
      #query = query.decode(errors='replace')
      uery = query.encode(errors='replace')
    return query

django配置:

關于django的基礎配置,如路由,app的注冊等基礎用法,暫時不過多說明;

以下主要關于APP中視圖的配置,生成json;

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
#引入數(shù)據(jù)
from .models import app51data
import json

def index(request):
  # return HttpResponse("hello world")
  # return render(request,'index.html')
  #獲取所有的對象,轉換成json格式
  data =app51data.objects.all()
  list3 = []
  i = 1
  for var in data:
    data = {}
    data['id'] = i
    data['Releasetime'] = var.Releasetime
    data['job_name'] = var.job_name
    data['salary'] = var.salary
    data['site'] = var.site
    data['education'] = var.education
    data['company_name'] = var.company_name
    data['Workexperience'] = var.Workexperience
    list3.append(data)
    i += 1

  # a = json.dumps(data)
  # b = json.dumps(list2)

  # 將集合或字典轉換成json 對象
  c = json.dumps(list3)
  return HttpResponse(c)

實現(xiàn)效果:

完整代碼在 GitHub 中,希望隨手star,感謝!

到此這篇關于Django-Scrapy生成后端json接口的方法示例的文章就介紹到這了,更多相關Django Scrapy生成json接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python標準算法實現(xiàn)數(shù)組全排列的方法

    python標準算法實現(xiàn)數(shù)組全排列的方法

    這篇文章主要介紹了python標準算法實現(xiàn)數(shù)組全排列的方法,實例分析了全排列的原理與Python實現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • TensorFlow keras卷積神經網絡 添加L2正則化方式

    TensorFlow keras卷積神經網絡 添加L2正則化方式

    這篇文章主要介紹了TensorFlow keras卷積神經網絡 添加L2正則化方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python使用列表推導式快速生成列表

    Python使用列表推導式快速生成列表

    這篇文章主要介紹了Python使用列表推導式快速生成列表,列表推導式是Python構建列表list的一種快捷方式,可以使用簡潔的代碼就創(chuàng)建出一個列表,需要的朋友可以參考下
    2023-07-07
  • python函數(shù)超時自動退出的實操方法

    python函數(shù)超時自動退出的實操方法

    在本篇文章里小編給大家整理的是一篇關于python函數(shù)超時自動退出的實操方法,有需要的朋友們可以學習下。
    2020-12-12
  • 如何在VSCode上輕松舒適的配置Python的方法步驟

    如何在VSCode上輕松舒適的配置Python的方法步驟

    這篇文章主要介紹了如何在VSCode上輕松舒適的配置Python的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 常見的在Python中實現(xiàn)單例模式的三種方法

    常見的在Python中實現(xiàn)單例模式的三種方法

    這篇文章主要介紹了常見的在Python中實現(xiàn)單例模式的三種方法,單例模式在各個編程語言的學習中都是需要掌握的基礎知識,需要的朋友可以參考下
    2015-04-04
  • pycharm創(chuàng)建scrapy項目教程及遇到的坑解析

    pycharm創(chuàng)建scrapy項目教程及遇到的坑解析

    這篇文章主要介紹了pycharm創(chuàng)建scrapy項目教程及遇到的坑解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python實現(xiàn)定時任務的九種方案總結

    Python實現(xiàn)定時任務的九種方案總結

    定時任務是編程中常見的需求,它可以按照預定的時間表執(zhí)行特定的任務或操作,在Python中,有多種方法可以實現(xiàn)定時任務,下面小編就來和大家詳細講講吧
    2023-11-11
  • Python爬蟲之App爬蟲視頻下載的實現(xiàn)

    Python爬蟲之App爬蟲視頻下載的實現(xiàn)

    這篇文章主要介紹了Python爬蟲之App爬蟲視頻下載的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python 統(tǒng)計Jira的bug 并發(fā)送郵件功能

    Python 統(tǒng)計Jira的bug 并發(fā)送郵件功能

    這篇文章主要介紹了Python 統(tǒng)計Jira的bug 并發(fā)送郵件,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論