python爬虫----(6. scrapy框架,抓取亚马逊数据)
时间:2022-07-22
本文章向大家介绍python爬虫----(6. scrapy框架,抓取亚马逊数据),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦。耽误了好久,还是豆瓣好呀,URL那么的规范。唉,亚马逊URL乱七八糟的.... 可能对url理解还不够.
amazon
├── amazon
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── items.py
│ ├── items.pyc
│ ├── msic
│ │ ├── __init__.py
│ │ └── pad_urls.py
│ ├── pipelines.py
│ ├── settings.py
│ ├── settings.pyc
│ └── spiders
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── pad_spider.py
│ └── pad_spider.pyc
├── pad.xml
└── scrapy.cfg
(1)items.py
from scrapy import Item, Field
class PadItem(Item):
sno = Field()
price = Field()
(2)pad_spider.py
# -*- coding: utf-8 -*-
from scrapy import Spider, Selector
from scrapy.http import Request
from amazon.items import PadItem
class PadSpider(Spider):
name = "pad"
allowed_domains = ["amazon.com"]
start_urls = []
u1 = 'http://www.amazon.cn/s/ref=sr_pg_'
u2 = '?rh=n%3A2016116051%2Cn%3A!2016117051%2Cn%3A888465051%2Cn%3A106200071&page='
u3 = '&ie=UTF8&qid=1408641827'
for i in range(181):
url = u1 + str(i+1) + u2 + str(i+1) + u3
start_urls.append(url)
def parse(self, response):
sel = Selector(response)
sites = sel.xpath('//div[@class="rsltGrid prod celwidget"]')
items = []
for site in sites:
item = PadItem()
item['sno'] = site.xpath('@name').extract()[0]
try:
item['price'] = site.xpath('ul/li/div/a/span/text()').extract()[0]
# 索引异常,说明是新品
except IndexError:
item['price'] = site.xpath('ul/li/a/span/text()').extract()[0]
items.append(item)
return items
(3)settings.py
# -*- coding: utf-8 -*-
# Scrapy settings for amazon project
#
# For simplicity, this file contains only the most important settings by
# default. All the other settings are documented here:
#
# http://doc.scrapy.org/en/latest/topics/settings.html
#
BOT_NAME = 'amazon'
SPIDER_MODULES = ['amazon.spiders']
NEWSPIDER_MODULE = 'amazon.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'amazon (+http://www.yourdomain.com)'
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'
FEED_URI = 'pad.xml'
FEED_FORMAT = 'xml'
(4)结果如下 pad.xml
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<sno>B00JWCIJ78</sno>
<price>¥3199.00</price>
</item>
<item>
<sno>B00E907DKM</sno>
<price>¥3079.00</price>
</item>
<item>
<sno>B00L8R7HKA</sno>
<price>¥3679.00</price>
</item>
<item>
<sno>B00IZ8W4F8</sno>
<price>¥3399.00</price>
</item>
<item>
<sno>B00MJMW4BU</sno>
<price>¥4399.00</price>
</item>
<item>
<sno>B00HV7KAMI</sno>
<price>¥3799.00</price>
</item>
...
</items>
(5)数据保存,保存到数据库
...
-- 2014年08月22日04:12:43
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
- WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
- 树大招风:细数2017年加密货币市场的幺蛾子事件
- 如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[上篇]
- 5个典型实例启发:什么是数据可视化
- 智能家居“智商”不够,能靠情商来补吗
- 大话MVP
- AngularJS in Action读书笔记1——扫平一揽子专业术语
- MS Enterprise Library 5.0发布!!
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]
- 《Enterprise Library深入解析与灵活应用》博文系列汇总
- 使命必达: 深入剖析WCF的可靠会话[概念篇]
- AngularJS in Action读书笔记2——view和controller的那些事儿
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习中的音频特征:理解Mel频谱图
- 兄弟,如何淡定地渡过七夕?
- Spring 源码第 9 篇,深入分析 FactoryBean
- PowerBI 动态数据格式 高级版 以及重要通知
- 气哭老板的顶级密钥存放方案,又做了一件蠢事
- 构建没有数据集的辣辣椒分类器,准确性达到96%
- 由 Redis 分布式锁造成的重大事故
- 10分钟搞定 Java 并发队列好吗?好的
- MySQL 案例:关于程序端的连接池与数据库的连接数
- spark和kafka jar包冲突NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream
- 聊聊claudb的scripting command
- PHP怎么获取视频总时长的函数方法
- 构建Docker私有仓库
- Dockerfile使用
- Nginx+KeepAlived实现高可用