开发笔记

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. 决策树ID3算法

    决策树 (Decision Tree)是在已知各种情况发生概率的基础上,通过构成 决策树 来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法 ...

  2. jQuery事件绑定、解绑、命名空间

    jQuery事件绑定.解绑.命名空间 <%@ page language="java" import="java.util.*" pageEncoding ...

  3. 【Unity3d游戏开发】游戏中的贝塞尔曲线以及其在Unity中的实现

    RT,马三最近在参与一款足球游戏的开发,其中涉及到足球的各种运动轨迹和路径,比如射门的轨迹,高吊球,香蕉球的轨迹.最早的版本中马三是使用物理引擎加力的方式实现的足球各种运动,后来的版本中使用了根据物理 ...

  4. Android开发系列之Context

    相信大家对于Context应该非常熟悉,但是Context到底是什么意思呢?到底指的是什么东西呢?我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程.Android系统的上下文对象,即 ...

  5. VS2013使用WebDeploy发布网站到IIS服务器

    VS2013用Web Deploy方式发布网站到IIS服务器发布文档 VS版本:VS2013 服务器版本:Windows Server 2012 R2 IIS版本:IIS8.0 Web Deploy版 ...

  6. 递归编译的Makefile的实现

    最近写了一个递归Makefile,目的是既可以实现子模块的单独编译,也可以不做任何修改就和整个程序的整体进行无缝衔接的编译.具体的思路是借助第三方文件,将子模块编译好的.o文件的路径自动写到confi ...

  7. 让EFCore更疯狂些的扩展类库(二):查询缓存、分部sql、表名替换的策略配置

    前言 上一篇介绍了扩展类库的功能简介,通过json文件配置sql语句 和 sql语句的直接执行,这篇开始说明sql配置的策略模块:策略管理器与各种策略的配置. 类库源码:github:https:// ...

  8. redis使用Lua脚本

    最近在看<Redis入门指南>第二版,感觉收获挺大,推荐大家有时间看一看.其中有一章讲Lua脚本,感觉挺实用,把总结整理一下. Redis在2.6中推出了脚本功能,允许开发者使用Lua语言 ...

  9. Python学习--17 访问数据库

    实际开发中,我们会经常用到数据库. Python里对数据库的操作API都很统一. SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以 ...

  10. Unsupported major.minor version 52.0错误解决 Ubuntu JDK8 安装配置

    Unsupported major.minor version 52.0错误一般是因为应用程序需要JDK8而ubuntu默认的是jdk7,所以需要切换到jdk8才能解决这个问题. 本文使用PPA方式安 ...