爬虫命令
- 创建scrapy项目
scrapy startproject tutorial
该条命令的作用是创建一个名叫tutorial的爬虫项目
文件结构为:
tutorial/
scrapy.cfg:项目的配置文件
tutorial/
__init__.py
items.py:自定义你爬下来保存的数据类型
pipelines.py:将爬取的数据保存到文件中 / 查重并丢弃,spider返回item后将作为参数传入该文件中的pipeline函数
settings.py: 项目的设置文件
spiders/ :放置爬虫(如何爬取)的代码的目录
__init__.py
...
- 创建spider
scrapy genspider [-t template] spider_name
-t 后面跟模板,比如basic/crawl(使用这个后继承Crawspider)
spider_name将会是你爬虫文件里name变量的值
- 启动spider
scrapy crawl XXX
XXX 是你在spiders目录的XXX.py文件中定义的name变量的值
item的定义
例子:
import scrapy
class DmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
使用Field定义
爬虫的编写
文件路径:tutotial/spiders/XXX.py
例子:
import scrapy
class DmozSpider(scrapy.spiders.Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)
- 继承的类可以是 CrawlSpider(递归爬取网站)
- name 爬虫的名字
- allowed_domains:爬取的域名
- start_urls:开始爬取的url
- rules:定义爬取的网站的url的形式
Item的提取
我们需要通过网站中编写的html代码来获取我们想要的信息
Scrapy提供的提取机制:XPath和CSS
Pipeline
为了启用pipeline组件,必须将它添加到settings.py下的
ITEM_PIPELINES变量下
例子:
ITEM_PIPELINES = {
'myproject.pipelines.PricePipeline': 300,
'myproject.pipelines.JsonWriterPipeline': 800,
}
数字高低决定执行顺序,按从低到高的顺序依次执行pipeline