一、项目准备

  • 开发环境:python3
  • 开发工具:pycharm
  • 使用技术:Scrapy + Django + PyMySQL

二、图书管理系统

1.创建项目

  • 创建Django项目
django-admin startproject web_book(项目名称)
  • 创建子应用
cd web_book
python manage.py startapp book(子应用名称)
  • 注册子应用:在settings.py文件中,INSTALLED_APPS项中进行子应用注册
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 注册子应用'book.apps.BookConfig',
]

2.MySQL配置

  • 1、安装myaqi驱动程序PyMySQL
pip install PyMySQL
  • 2、导入pymsql并创建实例化对象:在Django的工程同名子目录的__init__.py文件中添加如下语句。
from pymysql import install_as_MyAQLdbinstall_as_MySQLdb()
  • 3、配置MySQL信息:在Django的工程同名子目录的settings.py文件中修改DATABASES配置信息
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1',  # 数据库主机'PORT': 3306,  # 数据库端口'USER': 'root',  # 数据库用户名'PASSWORD': '123456',  # 数据库用户密码'NAME': 'book'  # 数据库名字}
}
  • 4、登陆MySQL客户端
 mysql -u root -p
  • 5、在MySQL中创建数据库book
create database book charset=utf8;

3.创建图书模型类

  • 创建模型类:book/models.py
from django.db import modelsclass BookInfo(models.Model):# 数据存储内容:大分类、小分类、书名、作者、出版社、价格、默认图片category = models.CharField(max_length=50, default="大类", verbose_name="图书大类")small_category = models.CharField(max_length=50, default="小类", verbose_name="图书小分类")name = models.CharField(max_length=100, default="无", verbose_name="书名")author = models.CharField(max_length=50, default="无", verbose_name="作者")store = models.CharField(max_length=100, default="无", verbose_name="出版社")pub_date = models.CharField(max_length=30, null=True, verbose_name="出版时间")price = models.DecimalField(decimal_places=2, max_digits=10, default="0.00", verbose_name="价格")default_image = models.ImageField(null=True, verbose_name="图片")class Meta:verbose_name = "图书"verbose_name_plural = verbose_namedef __str__(self):return self.name
  • 执行数据迁移和mysql数据库同步
cd web_book
python manage.py makemigrations
python manage.py migrate

4.Admin站点配置

  • 设置项目本地化
# 使用中国语言
LANGUAGE_CODE = 'zh-hans'
# 使用上海时间
TIME_ZONE = 'Asia/Shanghai'
  • 创建超级管理员用户

    • 用户名
    • 密码:至少8位,数字和字母混合使用
    • 邮箱:符合邮箱格式即可
python manage.py createsuperuser
  • 后台站点配置:admin.py
from django.contrib import admin
from .models import BookInfo# 自定义 管理类
class BookInfoAdmin(admin.ModelAdmin):# 列表页显示的内容list_display = ['id', "category", "small_category", 'name', "author", "store", "price"]# 注册模型类
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.site_header = '小七书城'
admin.site.site_title = '小七书城MIS'
admin.site.index_title = '欢迎使用小七书城MIS'
  • 启动后台服务器
python manage.py runserver
  • 访问链接http://127.0.0.1:8000/admin

三、爬取图书数据

1.爬取分析

  • 京东所有图书的总入口 :

    • https://book.jd.com/booksort.html
    • 解析大分类的名字 - 52个大分类
    • 解析小分类名字和链接 - 882个小分类
  • 每个小分类的图书列表url,如:中国当代小说
    • https://list.jd.com/list.html?cat=1713,3258,3297
    • 解析列表页所有的书,遍历解析每本书的详细信息
  • 翻页的网址page:
    • https://list.jd.com/list.html?cat=1713%2C3258%2C3297&page=3&s=53&click=0
    • 解析下一页的网址,如果没有值,代表当前小分类抓取完毕

2.数据清洗解析 - xpath

  • 图书首页
start_urls = "https://book.jd.com/booksort.html"
  • 图书大分类提取
# 获取所有大分类标签 dt
dt_list = '//*[@id="booksort"]/div[2]/dl/dt'
# 遍历52个大分类
for dt in dt_list:# 解析大分类的名字category = dt.xpath('./a/text()')
  • 图书小分类提取
 # 根据大分类取小分类em_list = './following-siblings::*[1]/em'for em in em_list:# 解析小分类的名字small_category = './a/text()'# 解析小分类的链接,注意:需要进行拼接small_link = 'http:' + "./a/@href"
  • 图书列表图书信息提取
# 解析列表页中所有的书
list_book = '//*[@id="J_goodsList"]/ul/li/div'
# 遍历解析每本书的详细信息
for book in list_book:# 书名name = ".//div[@class='p-name']/a/em/text()"# 作者author = ".//div[@class='p-bookdetails']/span[@class='p-bi-name']/a/text()"# 出版社store = ".//div[@class='p-bookdetails']/span[@class='p-bi-store']/a/text()"# 价格price = ".//div[@class='p-price']/strong/i/text()"# 图片地址default_image = ".//div[@class='p-img']/a/img/@src"
  • 提取列表页的翻页链接
next_url = ".//a[@class='pn-next']/@href"

3.实现爬取

  • 3.1创建爬虫项目:

    • 创建项目:scrapy startproject BOOK
    • 进入项目:cd BOOK
    • 创建爬虫:scrapy genspider book jd.com
    • 运行爬虫:scrapy crawl book
  • 3.2 爬虫项目配置:settings.py
# 设置用户代理
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'# 不遵守君子协议
ROBOTSTXT_OBEY = False
  • 3.3 爬虫爬取实现
class BookSpider(scrapy.Spider):name = 'book' # 爬虫名字allowed_domains = ['jd.com', 'p.3.cn'] # 允许爬取的域名范围start_urls = ['https://book.jd.com/booksort.html'] # 爬取的开始页面page = 0# 解析第一层的 大分类名字def parse(self, response):# 解析 大分类的名字 --- 52dt_list = response.xpath('//*[@id="booksort"]/div[2]/dl/dt[1]')# 解析 小分类的名字  和 链接 ---880# 遍历 所有的dt 标签, 使用xpath  follwing-sibling::*[1] 取出下一节点的 平级元素 ddfor dt in dt_list:item = {}item['category'] = dt.xpath('a/text()').extract_first()# 小分类em_list = dt.xpath('./following-sibling::*[1]/em')for em in em_list[:1]:item['small_category'] = em.xpath('a/text()').extract_first()small_link = 'https:' + em.xpath('a/@href').extract_first()# 发送 图书列表页请求 第二层yield scrapy.Request(small_link, callback=self.parse_book, meta={'book': deepcopy(item)})# 解析 列表页的 图书def parse_book(self, response):# 接收从 上一页 传入的itemitem = response.meta['book']# 取出所有的图书 book_listbook_list = response.xpath('//div[@id="plist"]/ul/li')for book in book_list[:1]:# 1.图书图片item['default_image'] = "https:" + book.xpath('.//div[@class="p-img"]/a/img/@src').extract_first()# 2.图书名字item['name'] = book.xpath('.//div[@class="p-name"]/a/em/text()').extract_first().strip()# 3.作者item['author'] = book.xpath('.//span[@class="author_type_1"]/a/text()').extract_first()# 4.出版社item['store'] = book.xpath('.//span[@class="p-bi-store"]/a/text()').extract_first()# 5.出版时间item['time'] = book.xpath('.//span[@class="p-bi-date"]/text()').extract_first().strip()item['price'] = book.xpath('.//div[@class="p-price"]/strong/i/text()').extract_first()# 价格--第二次发请求回来ajax无刷新实现的# item['book_price'] = book.xpath('.//div[@class="p-price"]/strong/i/text()').extract_first()"""https://p.3.cn/prices/mgets?skuIds=J_11757834"""# 获取图书idbook_id = book.xpath('./div/@data-sku').extract_first()# 拼接价格的urlprice_url = 'https://p.3.cn/prices/mgets?skuIds=J_{}'.format(book_id)# 发送价格的请求yield scrapy.Request(price_url, callback=self.parse_price, meta={'book': deepcopy(item)})# 解析价格def parse_price(self, response):item = response.meta['book']item['price'] = json.loads(response.body.decode())[0]['p']yield item# 只爬取 前5页self.page += 1if self.page > 4:return# 列表翻页# 1. 取出  下一页 标签 的 URL 网址不齐全next_url = response.xpath('//a[@class="pn-next"]/@href').extract_first()# 2. 发送 下一页的请求 可以if next_url: # 判断结束 如果 next_url 为none 就结束了yield response.follow(next_url,callback=self.parse_book,meta={'book': item})
  • 3.4 存储数据库:

    • 3.4.1 在pipeline.py文件中使用pipeline将爬取的数据入库
from pymysql import connect
from jdBook import settingsclass JdbookPipeline(object):def open_spider(self, spider):self.client = connect(host=settings.MYSQL_HOST,user=settings.MYSQL_USER,password=settings.MYSQL_PASSWORD,database=settings.MYSQL_DB_NAME,charset="utf8",)# 创建游标对象self.cur = self.client.cursor()def process_item(self,item,spider):try:values = (None,item["category"],item["small_category"],item["name"],item["author"],item["store"],item["pub_date"],item["price"],item["default_image"],)print(values)sql = "insert into book.book_bookinfo values (%s,%s,%s,%s,%s,%s,%s,%s,%s);"self.cur.execute(sql, values)# 提交sql语句self.client.commit()except Exception as e:# 打印错误日志print(e)return itemdef close_spider(self,spider):self.client.close()
  • 3.4.2 在settings.py文件中开启pipeline
ITEM_PIPELINES = {"BOOK.pipelines.BookPipeline":300,
}

京东图书爬虫可视化项目相关推荐

  1. 爬虫--可视化项目(一)

    利用的技术,Python,MySQL,(css,html,js,json,ajax,echarts)浅学. 学习视频,请参考2022年项目视频和资料已更新_哔哩哔哩_bilibili  具体步骤有所改 ...

  2. scrapy+selenuim中间件爬取京东图书有详细思考过程(涉及较广适合练手)

    网上很多版本的爬取京东图书都失效了 现在这个版本是能运行的截至到编辑的日期的前后(往后不敢保证) gitee仓库网址:https://gitee.com/cc2436686/jd_book_spide ...

  3. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  4. python爬取京东书籍_一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  5. 爬虫学习:爬取京东图书

    爬虫学习:scrapy爬取京东图书,详情页url地址对应的响应并不能满足数据提取的需要price字段(即当前url地址对应的响应与element中不一样存在缺失,所以需要构造能够获取价格的请求) # ...

  6. Java开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发Sh ...

  7. Python新闻推荐系统+爬虫+可视化 大数据项目 源码下载

    Python新闻推荐系统+爬虫+可视化 大数据项目 源码下载 网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题.文本.图片.视频链接 推荐算法:权重衰减+标签推荐+区域推荐+热点推 ...

  8. python学爬虫书籍_Python3实战爬虫之爬取京东图书的图文详解

    最近在学习python3,下面这篇文章主要给大家介绍了关于Python3实战爬虫之爬取京东图书图片的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下 ...

  9. Scrapy中selenium的应用-----并通过京东图书书籍信息爬取项目进行实操!

    引言------ 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载(ajax)的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值 ...

  10. 23个Python爬虫开源项目代码:微信、淘宝、豆瓣、知乎、微博...

    文末有干货 "Python高校",马上关注 真爱,请置顶或星标 来源:Python数据科学 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新 ...

最新文章

  1. Resultset获取行数和列数
  2. 2021阿里全球数学竞赛获奖名单出炉!北大获奖人数最多!
  3. 集团化后的挚文还有很多“新故事”可以讲
  4. php源代码compress,Php常见开源程序gzip网页压缩功能手动关闭或开启方法大全
  5. php的declare命令
  6. endnote中科大版区别_研究生科研入门Endnote文献管理软件使用
  7. JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码)
  8. SpringBoot不支持webapp的解决办法
  9. Python 生成器 迭代器
  10. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
  11. 3. jQuery 选择器
  12. 在WPF中开启摄像头扫描二维码(Media+Zxing)
  13. wpf使用Chart控件绘制线图
  14. python库文件简介整理
  15. Flask学习(二)-Jinji2模板引擎
  16. Linux文件管理 | Liunx 常用命令
  17. 全文搜索 full-text search
  18. 厦理OJ——1003:第三届程序设计大赛 让气球飞起来
  19. Intel NUC10i7FHN安装Ubuntu16.04
  20. html制作宣传页面

热门文章

  1. ubuntu下播放h264和h265工具vlc的安装使用
  2. 中华老黄历下载手机版免费_中华老黄历下载安装到手机-中华老黄历软件下载5.4.5 官方下载最新版-东坡下载...
  3. 龙芯2F Debain编openssl报/usr/local/bin/ld: /usr/lib/libdl.so: error adding symbols: file in wrong format
  4. 山西省计算机二级考试试题,2011山西省计算机等级考试试题 二级C试题考资料
  5. 天河二号计算机是微型计算机,计算机二级考试真题-PPT-天河二号超级计算机
  6. 风向风速传感器原理及应用
  7. 电视机芯片介绍-海思Hi3751 V600
  8. iwemeta元宇宙:阿里首任COO:如何打造销售铁军
  9. 拯救 中国区 谷歌翻译 解决方案
  10. 面试智力题精选:扑克牌问题