开发笔记

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. git 配置SSH免密

    1.安装TortoiseGit(比较简单,直接在官网上下载安装包安装) 2.打开下图标识 点击 generate按钮 生成key(需要等一会)   3.生成Key保存成.ppk文件,记得存放路径,(建 ...

  2. java如何获取本机IP

    java如何获取本机IP import java.net.*; public class Test6 { public static void main(String[] args) { // TOD ...

  3. java程序的工作原理

    Sun公司设计java语言的目标是让Java程序不必经过修改就可以在各种各样的计算机(包括PC机和工作站)上运行.为了实现这一目标,Sun公司提供了一阵Java虚拟机(Java Virtual Mac ...

  4. Boost.Asio技术文档

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  5. 本地ssh连接到vbox中的linux

    本机是window xp系统, 安装vbox,在vbox下安装linux,想在xp中用ssh连接linux,此时需要配置网络. 1.设置vbox的网络,选择host-only 2.设置window虚拟 ...

  6. HDU4734(数位dp)

    F(x) Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. Codeforce 712A Memory and Crow

    A. Memory and Crow time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  8. getstyle() 获取样式

    问题:在js动画中,如果元素设置了border,padding等,获取到的样式是盒子的样式,这样会影响动画的正常显示. 解决方案一:在元素的行内添加样式  如 <div style=" ...

  9. C++编程练习(13)----“排序算法 之 堆排序“

    堆排序 堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(也叫最大堆):或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(也叫最小堆). 最小堆和最大堆如 ...

  10. WAS缓存导致的修改文件不生效问题【转】

    WAS缓存导致的修改文件不生效问题: 解决方法: 一. 修改web.xml文件,需要修改以下三个目录下的文件: 1. /opt/IBM/WebSphere/AppServer/profiles/Dmg ...