Scrapy 初体验
开发笔记
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
/div[@attr='xxxx'] 选择属性为xxxx的div标签a/@title.extract() 输出a标签内的title属性值a/text() 取标签文本print ("title : " + p.xpath('dl/dd/a/@title').extract())print("link : " + p.xpath('dl/dd/a/@href').extract())print("price : " + p.xpath('dl/dd/span/text()').extract()) 取标签文本print("logo : " + p.xpath('a/img[@onerror="imgerror(event)"]/@src').extract())print("link : " + p.xpath('dl/dd/a/@href').extract())
趣玩网
创建工程
scrapy startproject quwanscrapy genspider -t basic QuwanSpider quwan.comROBOTSTXT_OBEY = False
首页html分析规律
480x480大方块
brick col2 masonry-brick 专题定位//div[@class=='brick col2 masonry-brick'] 专题定位/a/@href 专题详情页link (存在不完整连接)/a/img[@onerror="imgerror(event)"]/@src 专题头像link
235x235小方块
brick col1 commodity bestlikes masonry-brick 商品定位//div[@class='brick col1 commodity bestlikes masonry-brick'] 商品定位/a/@href 商品详情页link (存在不完整连接)/a/@title 名称/a/img[@onerror="imgerror(event)"]/@src 商品头像link/dl/dd/a/@href 商品详情页link (存在不完整连接)/dl/dd/a/@title 名称/dl/dd/span.text() 价格
滚动交互区域
brick col1 userActive
一键回顶部
goTop_box
商品详情页分析及提取
缩略图特效区域//a[@class="cloud-zoom"]/@href 缩略大图1//a[@class="cloud-zoom"]/img/@src 缩略大图2//ul[@class="pic_index"]/li[@class="pic_li"]/img/@src 缩略小图//div[@id="paykey_new"]//ul/li/dl/dt 品牌//div[@class="product_mess"] //商品信息//div[@class="mess_box"] //商品信息//div[@class="box details"]/p/img/@src 商品图片详情,多图组成//div[@class="gn_decri"]/p/text() 商品介绍文本
商品Item对象字段定义
class QuwanItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()goods_id = scrapy.Field() #商品idpage_id = scrapy.Field() #商品索引页logo = scrapy.Field() #商品列表logoprice = scrapy.Field()title = scrapy.Field()brand = scrapy.Field() #品牌pic_zoom_b1 = scrapy.Field() #缩略大图1pic_zoom_b2 = scrapy.Field() #缩略大图2pic_zoom_m = scrapy.Field() #缩略小图pic_des = scrapy.Field() #商品详情图goods_des = scrapy.Field() #商品文本简介params_name = scrapy.Field() #参数params_val = scrapy.Field()
坑爹的item
item.goods_id = "xxxx" 不能这样访问
item['goods_id'] = "xxxx" 非得这样访问
yield item 返回item对象安装加工管道逐个处理itemITEM_PIPELINES = {'quwan.pipelines.QuwanPipeline': 300,}
DB 数据持久化
页面表
页面id, 商品id
图片表
商品id, 图片顺序号, 图片链接, 图片类型(logo,缩放图,产品详情图)
商品信息表
商品id,价格、名称、参数、赞数量
需要考虑扩展的部分
- 品牌
- 好评指数
- 库存&到货通知
- 点赞喜欢
- 放上自己的微信二维码
- 分享链接可以考虑是否添加上
问题点
- 首页–详情,产品ID如何匹配?
- 数据库,手动建库还是对象映射,json?
- 缩略图特效支持
- Scrapy 如何多线程
Scrapy 初体验的更多相关文章
- Scrapy初体验(一) 环境部署
系统选择centOs 7,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, ...
- scrapy初体验 - 安装遇到的坑及第一个范例
scrapy,python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.scrapy用途广泛,可以用于数据挖掘.监测和自动化测试.scrapy的安装稍 ...
- scrapy初体验
1. 构建scrapy项目 scrapy startproject ['项目名'] 在spiders下生成文件 cd spiders scrapy genspider douban_spider [' ...
- Scrapy的初体验
上一节安装了python2和python3的开发环境 首先第一步:进入开发环境,workon article_spider 进入这个环境: 安装Scrapy,在安装的过程中出现了一些错误:通常这些错误 ...
- python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨
python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...
- [转]Python爬虫框架--pyspider初体验
标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报 分类: Python(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
随机推荐
- 添加redo日志组和添加日志组多元化
查看redo日志组的状态和日志的位置. SQL> 没有被使用,所以切几次日志,组合4已生效. SQL> select * from v$log; GROUP# THREAD# SEQ ...
- C# WINFORM ListView用法详解(转)
源代码下载位置: http://pan.baidu.com/s/1qXrLehe 一.ListView类 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false ...
- 用SWF来代替传统的帧动画
一般的帧动画是有两大缺点: 1.资源浪费,包大 2.很难实现平滑过渡 特别对于GIF,还会存在噪点问题,但是SWF利用自身的优势,不仅有现成的编辑器,而且还有矢量动画,补间动画等,大大 降低了资源的大 ...
- 将SWF文件用作资源打包
使用Flash开发网页游戏少不了与各种美术资源打交道.对于静态资源的那就是各种图片,对于会动的资源可以考虑直接做成swf.制作成swf的美术资源又可以分为两种:一种是直接将关键帧罗列在主时间轴上,那么 ...
- [TPYBoard-Micropython教程之1] 运行第一个脚本——点亮LED
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 一.TPYBoard V102开发板 TPYBoard V102 ...
- line-height系列(二)——对行内元素(文字、图片、兄弟元素)、块级元素设置line-height后的表现
>原创文章,转载请注明来源! 二.对行内元素(文字.图片.兄弟元素).块级元素设置line-height后的表现 对块级元素无效,对行内元素有效.可继承给行内元素. 文字的line-height ...
- 美丽的Java图表类库
摘要 在使用java做后台站点的开发张,图表和报表功能都是不可或缺 的.本文推荐了8款最精彩实用的Java图表应用,大部分图表应用的功能都类似,主要在于界面的美观性和使用的灵活性上有一点高低. 正文 ...
- android ExpandableListView实现不同的布局
最近有一个需求要实现listview的不同布局!因为有好几上header,就想到了ExpandableListView! 这个是我的需求模型:看图(自己画的) 然后百度~google~发帖~总算有点效 ...
- 蓝桥网试题 java 算法训练 区间k大数查询
-------------------------------------------------------------------------- 数组也有sort方法 尽量把输入和操作分开写 -- ...
- display的none与block(判断登录界面的账号密码是否为空)
判断登录界面的账号密码是否为空的时候又不想用alert显示就需要用display来隐藏alert啦(在设置时切忌要将隐藏的内容写在账号和密码的div中,否则会根据屏幕的分辨率不同而有所变化,这是本人教 ...