电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:132日期:2024-05-27 17:55:27

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

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

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

希望能堅持下來。加油!

學習點:

實現效果 django與scrapy的創建 setting中對接的位置和代碼段 scrapy_djangoitem使用 scrapy數據爬取保存部分 數據庫設計以及問題部分 django配置

實現效果:

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

django與scrapy的創建:

django的創建:

django startproject 項目名稱

cd 項目名稱python manage.py startapp appname

例如:

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

scrapy的創建:

# cd django的根目錄下cd job_hntingscrapy startproject 項目名稱#創建爬蟲scrapy genspider spidername ’www.xxx.com’

例如:

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

setting的設置:

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

在scrapy中的setting設置;

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

如:

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

scrapy_djangoitem使用:

pip install scrapy_djangoitem

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

import scrapy# 引入django中app中models文件中的類from app51.models import app51data# scrapy與django對接的庫from scrapy_djangoitem import DjangoItemclass JobprojectItem(DjangoItem): #引用django下的model中的類名 django_model = app51data

數據存儲部分對接在后面解釋,現在大體框架完整;

scrapy爬取保存部分:

首先編寫scrapy爬蟲部分:

我們選取的是51招聘網站的數據:

爬取分為三個函數:

主函數 解析函數 總頁數函數

51job的反爬手段:

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

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

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

獲得關鍵字總頁數:

# 解析json數據 jsonObject = json.loads(jsonText) number = jsonObject[’total_page’]

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

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

最后在解析函數中提取需要的數據:

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

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

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

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

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

設置數據庫:

Django配置數據庫有兩種方法:

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

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

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

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

[client]database = bloguser = blogpassword = bloghost =127.0.0.1port = 3306default-character-set = utf8

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

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

啟用Django與mysql的連接

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

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

import pymysqlpymysql.install_as_MySQLdb()

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

from django.db import models# Create your models here.#定義app51的數據模型class app51data(models.Model): #發布時間,長度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中只需要創建對應的數據庫即可,表名自動創建

每次修改數據庫都要進行以下命令:

python manage.py makemigrationspython manage.py migrate

到此mysql數據庫配置完成

配置數據庫時遇到的錯誤:

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

解決方法:

找到Django安裝目錄

G:envdjango_jobLibsite-packagesdjangodbbackendsmysqloperations.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 renderfrom django.http import HttpResponse# Create your views here.#引入數據from .models import app51dataimport jsondef 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)

實現效果:

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

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 武汉不干胶印刷_标签设计印刷_不干胶标签印刷厂 - 武汉不干胶标签印刷厂家 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」| 找培训机构_找学习课程_励普教育 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 首页 - 张店继勇软件开发工作室| 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 真丝围巾|真丝丝巾|羊绒围巾|围巾品牌|浙江越缇围巾厂家定制 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 |