在本次教程中,默认已安装scrapy,如果没有安装,请返回看前面的安装指导
我们将要以 Open directory project (dmoz)为例进行爬虫
本次教程将会完成以下内容:
- 创建一个scrapy项目
- 定义Item(想要截取的数据)
- 写spider ,爬虫数据
- 写Item Pipeline存储额外的items
创建项目
scrapy startproject tutorial 创建了一个tutorial的目录,结构内容如下
tutorial/ scrapy.cfg # 配置文件 tutorial/ # 项目的python model, __init__.py items.py # 项目的items文件 pipelines.py # 项目的pipelines文件 settings.py # 项目的setting文件 spiders/ # 存放spider的地方 __init__.py ...
定义Item
item包含爬虫的数据,内容形式类似python中的dict,先创建一个scrapy.Item类,然后定义属性,赋值为scrapy.Field
访问dmoz.org,假设我们想获取name,url,description这三个属性数据,首先编写items.py
import scrapy
class DmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
第一个spider
spider是一个类,用于定义和爬虫网站信息
为了创建spider,需要scrapy.spider类,并且定义一些属性
- name:Spider的唯一名字
- start_urls:spider爬虫开始的地方,
- parse():spider方法,当下载request url后,调用此方法,将请求响应的内容作为唯一的参数传递给parse()方法;通过响应内容,解析数据,获取爬虫数据(根据Item中定义的内容),并且可以生成更多的url,继续请求
import scrapy
class DmozSpider(scrapy.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] + '.html' with open(filename, 'wb') as f: f.write(response.body)爬虫
在命令行,切换到项目根目录下,运行scrapy crawl dmoz命令,开始爬虫,显示内容如下
现在查看项目根目录,会发现生成了两个html文件,Books.html 和 Resources.html
截取Items
Selector选择器介绍
scrapy 使用Scrapy Selector 来获取数据,基于Xpath 和CSS
xpath
/html/head/title :获取<head>标签下的<title>元素
/html/head/title/text():获取<title>元素中的文本信息
//td:查询所有的td元素
//div[@class="mine"]:查询所有class=“mine”的div元素