Scrapy开启

命令行基本操作

通过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 scrapy
class 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’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值