Scrapy开启

来源:互联网 发布:数据库系统原理视频 编辑:程序博客网 时间:2024/06/08 08:37

命令行基本操作

通过pip3 install scrapy安装完scrapy后,在命令行输入scrapy可以看到scrapy的相关命令。1.创建一个项目:先通过cd命令切换到创建项目的目录
通过: scrapy startproject jackeylove(项目名)
scrapy.cfg: 项目的配置文件jackeylove/: 该项目的python模块。之后您将在此加入代码。jackeylove/items.py: 项目中的item文件.jackeylove/pipelines.py: 项目中的pipelines文件.jackeylove/settings.py: 项目的设置文件.jackeylove/spiders/: 放置spider代码的目录.2.定义Item(根据网页所要获取的字段),若有多个网页类型,可以定义多个Item类,类似于一个字段容器,来存所要的Item。Item的形式是python的字典形式。
import scrapyclass DmozItem(scrapy.Item):    title = scrapy.Field()    link = scrapy.Field()    desc = scrapy.Field()
3.设计适用于目标网页的Spider(核心)其包含了一个用于下载的初始URL(start_urls列表),如何跟进网页中的链接以及如何分析页面中的内容(parse函数), 提取生成 item 的方法(selector类的操作,包括response.selector.css(),response.selectot.xpath())。为了创建一个Spider,您必须继承 scrapy.Spider 类, 且定义以下三个属性:1.name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。(在scrapy crawl spider_name中,就必须填入唯一标示的name)2.start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。(url的后续跟进以及start_urls的url返回的response默认交给parse函数处理分析。3.parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。(注意,scrapy框架中的传递的是Request对象)

Scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request 对象,并将 parse 方法作为回调函数(callback)赋值给了Request。

Request对象经过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。

提取Item,通过操作selector这个对象

从网页中提取数据有很多方法。Scrapy使用了一种基于 XPath 和 CSS 表达式机制: Scrapy Selectors

/html/head/title: 选择HTML文档中 <head> 标签内的 <title> 元素(一层一层标签的选择)/html/head/title/text(): 选择上面提到的 <title> 元素的文字(标签内的文本通过/text()获取)//td: 选择所有的 <td> 元素//div[@class="mine"]: 选择所有具有 class="mine" 属性的 div 元素

为了配合XPath,Scrapy除了提供了 Selector 之外,还提供了方法来避免每次从response中提取数据时生成selector的麻烦。

response.css()或者response.xpath()可以直接从response获取,不必生成selector对象。

Selector有四个基本的方法(点击相应的方法可以看到详细的API文档):

xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.extract(): 序列化该节点为unicode字符串并返回list。extract_first():从列表中直接选出第一个re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。

scrapy用-o filename.json 输出时,会默认使用unicode编码,当内容为中文时,输出的json文件不便于查看
可以在setting.py文件中修改默认的输出编码方式,只需要在setting.py中增加如下语句(默认似乎是没有指定的,所以要增加,如果默认有,就直接修改)

FEED_EXPORT_ENCODING = ‘utf-8’

原创粉丝点击