本文参考Scrapy Tutorial里面的文档,翻译出来加上自己的理解,供大家学习。

在本文中,我们将学会如何使用Scrapy建立一个爬虫程序,并爬取指定网站上的内容,这一切在Scrapy框架内实现将是很简单轻松的事情。

本教程主要内容包括一下四步:

1. 创建一个新的Scrapy Project
2. 定义你需要从网页中提取的元素Item
3. 实现一个Spider类,通过接口完成爬取URL和提取Item的功能
4. 实现一个Item PipeLine类,完成Item的存储功能

新建工程

首先,为我们的爬虫新建一个工程,首先进入一个目录(任意一个我们用来保存代码的目录),执行:

1
scrapy startproject Domz

最后的Domz就是项目名称。这个命令会在当前目录下创建一个新目录Domz,结构如下:

1
2
3
4
5
6
7
8
9
dmoz/scrapy.cfg   dmoz/__init__.pyitems.pypipelines.pysettings.pyspiders/__init__.py

scrapy.cfg: 项目配置文件
items.py: 需要提取的数据结构定义文件
pipelines.py: 管道定义,用来对items里面提取的数据做进一步处理,如保存等
settings.py: 爬虫配置文件
spiders: 放置spider的目录

定义Item

在items.py里面定义我们要抓取的数据:

1
2
3
4
5
6
from scrapy.item import Item, Fieldclass DmozItem(Item):title = Field()link = Field()desc = Field()

这里我们需要获取dmoz页面上的标题,链接,描述,所以定义一个对应的items结构,不像Django里面models的定义有那么多种类的Field,这里只有一种就叫Field(),再复杂就是Field可以接受一个default值。

实现Spider

spider只是一个继承字scrapy.spider.BaseSpider的Python类,有三个必需的定义的成员

name: 名字,这个spider的标识
start_urls: 一个url列表,spider从这些网页开始抓取
parse(): 一个方法,当start_urls里面的网页抓取下来之后需要调用这个方法解析网页内容,同时需要返回下一个需要抓取的网页,或者返回items列表

所以在spiders目录下新建一个spider,dmoz_spider.py:

1
2
3
4
5
6
7
8
9
10
class DmozSpider(BaseSpider):name = "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]open(filename, 'wb').write(response.body)

提取Item

提取数据到Items里面,主要用到XPath提取网页数据:

scrapy有提供两个XPath选择器,HtmlXPathSelector和XmlXPathSelector,一个用于HTML,一个用于XML,XPath选择器有三个方法

select(xpath): 返回一个相对于当前选中节点的选择器列表(一个XPath可能选到多个节点)
extract(): 返回选择器(列表)对应的节点的字符串(列表)
re(regex): 返回正则表达式匹配的字符串(分组匹配)列表
一种很好的方法是在Shell里面对XPath进行测试:

1
scrapy shell http://www.dmoz.org/Computers/Programming/Languages/Python/Books/

现在修改parse()方法看看如何提取数据到items里面去:

1
2
3
4
5
6
7
8
9
10
11
def parse(self, response):hxs = HtmlXPathSelector(response)sites = hxs.select('//ul/li')items = []for site in sites:item = DmozItem()item['title'] = site.select('a/text()').extract()item['link'] = site.select('a/@href').extract()item['desc'] = site.select('text()').extract()items.append(item)return items

实现PipeLine

PipeLine用来对Spider返回的Item列表进行保存操作,可以写入到文件、或者数据库等。

PipeLine只有一个需要实现的方法:process_item,例如我们将Item保存到一个文件中:

1
2
3
4
5
def __init__(self):self.file = open('jingdong.txt', 'wb')def process_item(self, item, spider):self.file.write(item['title'] + '\t'+ item['link'] + '\t' + item['desc']+'\n')

到现在,我们就完成了一个基本的爬虫的实现,可以输入下面的命令来启动这个Spider:

1
scrapy crawl dmoz.org

原创文章,转载请注明:转载自CodeLogic[http://www.icodelogic.com]
本文链接地址: http://www.icodelogic.com/?p=441

Scrapy入门教程相关推荐

  1. python scrapy 简单教程_python之scrapy入门教程

    看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...

  2. Scrapy入门教程(2)——保存数据

    爬取股票名称.每股利润和净利润 完整项目已上传至github 链接:https://github.com/yinhaox/02_scrapy 数据爬取 可以接着之间的项目改,也可以重建一个 图一网页截 ...

  3. Scrapy入门教程实例

    Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. scrapy的整体框架如下所示: Scrapy主要 ...

  4. Scrapy爬取P2P新闻入门教程

    文章目录 安装Scrapy 建立Scrapy项目 修改配置文件 定义Item 编写Spider类 运行爬虫 参考链接 本博客不介绍具体细节,详细入门教程可以看最下方的参考链接,本博客只介绍如何实现一个 ...

  5. Scrapy爬虫入门教程五 Selectors(选择器)

    Scrapy爬虫入门教程一 安装和基本使用 Scrapy爬虫入门教程二 官方提供Demo Scrapy爬虫入门教程三 命令行工具介绍和示例 Scrapy爬虫入门教程四 Spider(爬虫) Scrap ...

  6. Python Scrapy中文教程,Scrapy框架快速入门!

    谈起爬虫必然要提起 Scrapy 框架,因为它能够帮助提升爬虫的效率,从而更好地实现爬虫. Scrapy 是一个为了抓取网页数据.提取结构性数据而编写的应用框架,该框架是封装的,包含 request ...

  7. python scrapy教程实例_爬虫框架Scrapy的第一个爬虫示例入门教程

    原标题:爬虫框架Scrapy的第一个爬虫示例入门教程 我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建 ...

  8. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...

    本文主要向大家介绍了Python爬虫实战的爬虫框架Scrapy的第一个爬虫示例入门教程,通过具体的内容向大家展现,希望对大家学习Python爬虫实战有所帮助. 我们使用dmoz.org这个网站来作为小 ...

  9. python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门

    前言 转行做python程序员已经有三个月了,这三个月用Scrapy爬虫框架写了将近两百个爬虫,不能说精通了Scrapy,但是已经对Scrapy有了一定的熟悉.准备写一个系列的Scrapy爬虫教程,一 ...

最新文章

  1. java ArrayList 清空元素时迭代器造成的错误
  2. 【Android】3.12 兴趣点( POI)搜索功能
  3. 图像处理(二十一)基于数据驱动的人脸卡通动画生成-Siggraph Asia 2014
  4. python的引用计数分析(二)
  5. maven中如何将所有引用的jar包打包到一个jar中
  6. github结合TortoiseGit使用sshkey,无需输入账号和密码
  7. 【面试虐菜】—— MongoDB知识整理
  8. SABAPDEMOS 这个包下好多好玩儿的,可以看看
  9. 利用iisnode模块,让你的Node.js应用跑在Windows系统IIS中
  10. apk html启动图,apk添加启动图(AddApkSplashTools)
  11. [数学建模] TOPSIS法(考虑权重和不考虑权重)--评价类问题
  12. tkm批量转mp3工具使用教程
  13. 使用OpenSSL库接口,实现AES CBC加密,基于X509 base64编码证书的RSA非对称加密例子
  14. bootloader 详细介绍
  15. 恶意软件家族分类 模型集成方案总结
  16. pytorch---Cosine learning rate scheduler
  17. OpenJ_Bailian 2748
  18. nacos配置中心提示com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exceptio
  19. 有趣的java代码_求一些有趣的java小程序?
  20. 助力企业设备上云,京东云上物联网产品重磅发布

热门文章

  1. 推荐经典算法实现之BPMF(pymc3+MovieLen)
  2. 【正一专栏】如果世界杯上没有了意大利
  3. Ubuntu图形界面配置开机自启动
  4. Python 中的 if __name__ == __main__ 该如何理解
  5. 数据结构源码笔记(C语言):B树的相关运算算法
  6. 业余学python数据挖掘怎么赚钱_0基础转行学Python,学到什么地步能拿到月薪15k+?...
  7. yolov5训练_YoloV5模型训练实战教程:Kaggle全球小麦检测竞赛
  8. Define and Publish Platform Events
  9. WebMagic功能——XPath、CSS选择器、正则表达式 || 抽取元素API、获取结果API || ​​​​​​​获取链接||​​​​​​​使用Pipeline保存结果
  10. matplotlib中plot的颜色