基于scrapy的二次开发框架,通过简单配置,即可实现一个网站分类中所有项目指定信息的抓取
常驻式进程,启动之后,通过feed投放任务,使用redis实现分布式,多台机器多个爬虫实时监控任务抓取
- xpath表达式,正则表达式,以及css表达式,至少会其中一项
- python 字典和列表数据结构
- python lambda 表达式的使用
- python 简单函数编写
- 了解scrapy的基本概念,参见scrapy简单介绍
web-walker 1.2.2版本以下是python2.7版本
web-walker 3.0.0版本以上是python3.6版本
git clone https://github.com/ShichaoMa/webWalker.git
cd webWalker/walker && (sudo) python setup.py install
or
(sudo) pip install web-walker==X.X.X
ubuntu@dev:~/myprojects$ scrapy startproject demo
New Scrapy project 'demo' created in:
/home/ubuntu/myprojects/demo
You can start your first spider with:
cd demo
scrapy genspider example example.com
# 目录结构如下
.
├── demo
│ ├── __init__.py
│ ├── items.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ └── __init__.py
└── scrapy.cfg
1 或者直接从test中复制myapp,如果要改项目名字,记得修改scarpy.cfg中的名字
# spiders.py
# -*- coding:utf-8 -*
SPIDERS = { # 配置spider, spider名称一个字典,字典中为这个spider的一些自定义属性,可为空
"bluefly": {}
}
# page_xpath.py
# -*- coding:utf-8 -*
PAGE_XPATH = { # 配置网站分类页中获取下一页链接的方式,具体策略参见wiki
"bluefly": [
'//*[@id="page-content"]//a[@rel="next"]/@href',
]
}
# item_xpath.py
# -*- coding:utf-8 -*
ITEM_XPATH = { # 配置网站分类页中获取商品页链接的方式,xpath表达式
"bluefly": [
'//ul[@class="mz-productlist-list mz-l-tiles"]/li//a[@class="mz-productlisting-title"]/@href',
]
}
# item_field
# -*- coding:utf-8 -*
ITEM_FIELD = { # 商品页中,所需信息的获取方式,具体策略参见wiki
"bluefly": [
('product_id', {
"xpath": [
'//li[@itemprop="productID"]/text()',
],
}),
('brand', {
"xpath": [
'//p[@class="mz-productbrand"]/a/text()',
],
}),
('names', {
"xpath": [
'//span[@class="mz-breadcrumb-current"]/text()',
],
}),
]
}
#如果没有安装redis,可以使用自带的custom-redis,配置文件中需写明CUSTOM_REDIS=True
custom-redis-server -p 6379
cd demo
scrapy crawl bluefly
# 使用自带的costom-redis 需要加上 --custom
# 投放分类链接
feed -c test_01 -s bluefly -u "http://www.bluefly.com/assortment/the-boot-shop-overarching/women/shoes" --custom
# 投放项目链接,支持多个项目链接一起投放,把每个链接按行放到一个文件中即可
feed -c test_04 -s ashford -uf item.txt --custom
# 使用自带的costom-redis 需要加上 --custom
check test_01 --custom
参见wiki