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 quwan
scrapy genspider -t basic QuwanSpider quwan.com
ROBOTSTXT_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() #商品id
page_id = scrapy.Field() #商品索引页
logo = scrapy.Field() #商品列表logo
price = scrapy.Field()
title = scrapy.Field()
brand = scrapy.Field() #品牌
pic_zoom_b1 = scrapy.Field() #缩略大图1
pic_zoom_b2 = scrapy.Field() #缩略大图2
pic_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对象
安装加工管道逐个处理item
ITEM_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 控制反转)和 ...
随机推荐
- react中常用的一些方法
React.createClass:创建一个ReactClass(组件类),参数是一个对象且必须带有 render 属性方法,该方法必须返回一个封闭的容器(容器内可以有其它不限结构的容器)或 null ...
- MySQL ibdata多路径扩容
vi /etc/my.cnf innodb_data_home_dir = innodb_data_file_path= /data/mysql/ibdata1:10M:autoextend(为目前i ...
- Android常用开发工具的用法
1.在命令行创建.删除和浏览AVD 在命令行下管理AVD需要借助于android命令(位于Android SDK安装目录的tools子目录下),如果直接执行android子命令将会启动Android ...
- c#异步和多线程有什么区别和联系?
异步和多线程可以说没有必然的联系,只能说异步可以通过多线程实现而已要理解这些东西,你得具备很多相关的知识,操作系统原理,编译原理等简单地来说,计算机或者说CPU执行你的代码都是顺序执行的,当前的语句没 ...
- Firebug及YSlow简介与使用图文详解
Firebug本是Firefox浏览器下一个出色的网页设计插件,随着浏览器的发展,Firebug也推出了支持IE.Opera.Chrome的Firebug Lite.凭借Firebug的出色代码调试功 ...
- Bootstrap入门(十三)组件7:导航条
Bootstrap入门(十三)组件7:导航条 1.默认样式的导航条 2.嵌入表单和按钮 3.嵌入文本和非导航的链接 4.组件排列和下拉菜单 5.固定在顶部/底部 6.反色的导航条 7.路径导航 首先先 ...
- Word,Excel,PowerPoint协作实用功能
Word,Excel,PowerPoint协作实用功能 纯手打,可能有错别字,使用的版本是office2013 转载请注明出处,谢谢 将Word表格复制到Excel中 点击Word表格左上角的按钮-- ...
- 使用PMD进行代码审查
很久没写博客了,自从上次写的设计模式的博客被不知名的鹳狸猿下架了一次之后兴趣大减,那时候就没什么兴致写博客了,但是这段时间还没有停下来,最近也在研究一些其他的东西,目前有点想做点东西的打算,但好像也没 ...
- 支付宝App支付~关于它的一些坑
坑这个词不仅在微信平台适用,在支付宝也一样的,下面我们来看一下我在做App支付时的一些坑! APP支持流程: 网站H5下单->向支付宝生成订单->回调app的js->app调用支付宝 ...
- SQL极限函数limit()详解<分页必备>
limit含义: limit英语中的含义是限制,限定的意思.小日本曾上映过一个电影就是叫limit是由漫画改编的电影,剧情很变态,但不可否认小日本由于地狭人稠的原因,在观念上的资源危机意识还是很强的哈 ...