一、demo介绍:
- 创建一个Scrapy项目(爬虫)
- 定义提取的Item对象(即ORM,类似于Java中的POJO实体类)
- 编写爬取的Spider爬虫并且提取Item(核心内容)
- 编写item pipeline管道来存储提取的item信息(持久化数据,例如存Mysql数据库或者MongoDB数据库或者导出CSV、Excel文件等等操作)
二、创建项目
使用startproject
命令创建一个Scrapy
爬虫项目
scrapy startproject tutorial
image.png
三、目录结构:
|-tutorial/
|-scrapy.cfg
|-tutorial/
|-__init__.py
|-items.py
|-pipelines.py
|-settings.py
|-middlewares.py
|-spiders/
|- __init__.py
四、结构说明:
- tutorial/init.py:该文件定义了包的属性和方法。一个包是一个带有特殊文件 init.py 的目录,其实它可以什么也不定义,可以只是一个空文件,但是必须存在(如果删掉就变成一个普通的目录了)。
- scrapy.cfg: 自动生成的项目配置文件(类似于eclipse生成的.project文件,或者idea生成的.iml文件)。
- tutorial/: 该项目的python模块,之后您将在此加入代码。
- tutorial/items.py: 项目中的item文件(ORM定义)。
- tutorial/pipelines.py: 项目中的pipelines文件(存储数据)。
- tutorial/middlewares.py: Spider中间件(常用的有下载中间件,即处理下载请求部分,这里不做介绍,如果想深入了解可以看下官网教程)
- tutorial/settings.py: 项目的核心配置文件(配置请求头、数据库连接信息、USER_AGENT,线程数等等)。
- tutorial/spiders/: 放置spider代码的目录(编写spider爬虫)。
五、定义Item
ORM(对象关系映射)定义,如果做过javaweb
开发的童靴应该知道,就和通常我们定义的javaBean
对象一样,用来装载对象数据用的。
import scrapy
class TutorialItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
六、编写第一个爬虫(Spider)
在tutorial/spiders
目录下新建一个dmoz_spider.py
文件,创建一个DmozSplider
类,并且继承scrapy.Spider
类。
import scrapy
class DmozSplider(scrapy.Spider):
name="dmoz"
allowed_domain=["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)
注意,上面我们创建了一个DmozSplider
类,并且该类必须继承于scrapy.Spider
类,且同时定义以下三个属性:
name:用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
start_urls:包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
parse():是spider的一个方法。 被调用时,每个初始URL完成下载后生成的Response
对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的Request
对象。
七、爬取
进入项目的根目录,执行下列命令启动spider爬虫:
scrapy crawl dmoz
或者写一个main.py
启动入口(如果是在PyCharm
中,直接右键运行【Run Main】即可):
from scrapy import cmdline
cmdline.execute("scrapy crawl dmoz".split())
image.png
八、保存爬取到的数据:
scrapy crawl dmoz -o items.json
该命令将采用 JSON 格式对爬取的数据进行序列化,生成items.json
文件
官网教程:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#spider
网友评论