开发笔记

Scrapy 初体验

  • scrapy startproject project_name 创建工程

  • scrapy genspider -t basic spider_name website.com 以basic模版创建爬虫

  • ROBOTSTXT_OBEY = False 不遵守Robots协议

  • Item 添加字段

  • 添加pipeline用于Item处理(输出到屏幕/数据/json)

  • 配置pipeline dangdang.pipelines.DangdangPipeline': 300

  • 添加爬取逻辑 : def parse(self, response):

  • scrapy crawl spider_name —nolog 启动爬虫

PyCharm中启动爬虫调试

命令行执行 scrapy crawler spider启动爬虫,其实与下面指令是一样的:

python C:\Python34\Lib\site-packages\scrapy\cmdline.py crawl spider_name

的效果是一样的

这样只需要在pycharm中的Run下Edit Configurations…中做运行配置即可:

Script: C:\Python34\Lib\site-packages\scrapy\cmdline.py

Script parameters: crawl spider_name

XPath

  1. /div[@attr='xxxx'] 选择属性为xxxx的div标签
  2. a/@title.extract() 输出a标签内的title属性值
  3. a/text() 取标签文本
  4. print ("title : " + p.xpath('dl/dd/a/@title').extract())
  5. print("link : " + p.xpath('dl/dd/a/@href').extract())
  6. print("price : " + p.xpath('dl/dd/span/text()').extract()) 取标签文本
  7. print("logo : " + p.xpath('a/img[@onerror="imgerror(event)"]/@src').extract())
  8. print("link : " + p.xpath('dl/dd/a/@href').extract())

趣玩网

创建工程

  1. scrapy startproject quwan
  2. scrapy genspider -t basic QuwanSpider quwan.com
  3. ROBOTSTXT_OBEY = False

首页html分析规律

480x480大方块

  1. brick col2 masonry-brick 专题定位
  2. //div[@class=='brick col2 masonry-brick'] 专题定位
  3. /a/@href 专题详情页link (存在不完整连接)
  4. /a/img[@onerror="imgerror(event)"]/@src 专题头像link

235x235小方块

  1. brick col1 commodity bestlikes masonry-brick 商品定位
  2. //div[@class='brick col1 commodity bestlikes masonry-brick'] 商品定位
  3. /a/@href 商品详情页link (存在不完整连接)
  4. /a/@title 名称
  5. /a/img[@onerror="imgerror(event)"]/@src 商品头像link
  6. /dl/dd/a/@href 商品详情页link (存在不完整连接)
  7. /dl/dd/a/@title 名称
  8. /dl/dd/span.text() 价格

滚动交互区域

brick col1 userActive

一键回顶部

goTop_box

商品详情页分析及提取

  1. 缩略图特效区域
  2. //a[@class="cloud-zoom"]/@href 缩略大图1
  3. //a[@class="cloud-zoom"]/img/@src 缩略大图2
  4. //ul[@class="pic_index"]/li[@class="pic_li"]/img/@src 缩略小图
  5. //div[@id="paykey_new"]//ul/li/dl/dt 品牌
  6. //div[@class="product_mess"] //商品信息
  7. //div[@class="mess_box"] //商品信息
  8. //div[@class="box details"]/p/img/@src 商品图片详情,多图组成
  9. //div[@class="gn_decri"]/p/text() 商品介绍文本

商品Item对象字段定义

  1. class QuwanItem(scrapy.Item):
  2. # define the fields for your item here like:
  3. # name = scrapy.Field()
  4. goods_id = scrapy.Field() #商品id
  5. page_id = scrapy.Field() #商品索引页
  6. logo = scrapy.Field() #商品列表logo
  7. price = scrapy.Field()
  8. title = scrapy.Field()
  9. brand = scrapy.Field() #品牌
  10. pic_zoom_b1 = scrapy.Field() #缩略大图1
  11. pic_zoom_b2 = scrapy.Field() #缩略大图2
  12. pic_zoom_m = scrapy.Field() #缩略小图
  13. pic_des = scrapy.Field() #商品详情图
  14. goods_des = scrapy.Field() #商品文本简介
  15. params_name = scrapy.Field() #参数
  16. params_val = scrapy.Field()

坑爹的item

item.goods_id = "xxxx" 不能这样访问

item['goods_id'] = "xxxx" 非得这样访问

  1. yield item 返回item对象
  2. 安装加工管道逐个处理item
  3. ITEM_PIPELINES = {
  4. 'quwan.pipelines.QuwanPipeline': 300,
  5. }

DB 数据持久化

使用SQLAlchemy教程

页面表

页面id, 商品id

图片表

商品id, 图片顺序号, 图片链接, 图片类型(logo,缩放图,产品详情图)

商品信息表

商品id,价格、名称、参数、赞数量

需要考虑扩展的部分

  • 品牌
  • 好评指数
  • 库存&到货通知
  • 点赞喜欢
  • 放上自己的微信二维码
  • 分享链接可以考虑是否添加上

问题点

  • 首页–详情,产品ID如何匹配?
  • 数据库,手动建库还是对象映射,json?
  • 缩略图特效支持
  • Scrapy 如何多线程

Scrapy 初体验的更多相关文章

  1. Scrapy初体验(一) 环境部署

    系统选择centOs 7,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, ...

  2. scrapy初体验 - 安装遇到的坑及第一个范例

    scrapy,python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.scrapy用途广泛,可以用于数据挖掘.监测和自动化测试.scrapy的安装稍 ...

  3. scrapy初体验

    1. 构建scrapy项目 scrapy startproject ['项目名'] 在spiders下生成文件 cd spiders scrapy genspider douban_spider [' ...

  4. Scrapy的初体验

    上一节安装了python2和python3的开发环境 首先第一步:进入开发环境,workon article_spider 进入这个环境: 安装Scrapy,在安装的过程中出现了一些错误:通常这些错误 ...

  5. python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨

    python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...

  6. [转]Python爬虫框架--pyspider初体验

    标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报  分类: Python(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  7. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  8. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  9. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

随机推荐

  1. RAC时间同步的两种方法

    集群时间同步服务在集群中的两个 Oracle RAC 节点上执行以下集群时间同步服务配置.Oracle Clusterware 11g 第 2 版及更高版本要求在部署了 Oracle RAC 的集群的 ...

  2. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  3. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...

  4. oracle求时间差的常用函数

    oracle求时间差的常用函数   求时间差:    天:  ROUND(TO_NUMBER(END_DATE - START_DATE))    小时:  ROUND(TO_NUMBER(END_D ...

  5. 通过浏览器navigator判断浏览器版本或者手机类型&&判断微信访问

    javascript 的navigator属性,不常用,但是用处也不少,主要用处是在做浏览器兼容的问题的时候,现在有的网站已经不兼容IE6,用户假如用IE6浏览网页的话,会提示浏览器升级等信息.或者判 ...

  6. SuperSocket入门(一)-Telnet服务器和客户端请求处理

    本文的控制台项目是根据SuperSocket官方Telnet示例代码进行调试的,官方示例代码:Telnet示例. 开始我的第一个Telnet控制台项目之旅: 创建控制台项目:打开vs程序,文件=> ...

  7. JDK源码分析-Integer

    Integer是平时开发中最常用的类之一,但是如果没有研究过源码很多特性和坑可能就不知道,下面深入源码来分析一下Integer的设计和实现. Integer: 继承结构: -java.lang.Obj ...

  8. Java豆瓣电影爬虫——减少与数据库交互实现批量插入

    节前一个误操作把mysql中record表和movie表都清空了,显然我是没有做什么mysql备份的.所以,索性我把所有的表数据都清空的,一夜回到解放前…… 项目地址:https://github.c ...

  9. WinForm 控件(上)

    窗体的事件 每一个窗体都有一个事件,这个窗体加载完成之后执行哪一段代码 位置:1)右键属性→事件→load 双击进入 2)双击窗体任意一个位置进入 删除事件:先将事件页面里面的挂好的事件删除,再删后台 ...

  10. 蓝桥网试题 java 基础练习 十六进制转十进制

    ---------------------------------------------------------------------------------------- 貌似用int类型不会超 ...