关于一只爬虫

记一只爬虫

记一只爬虫

新建project

scrapy startproject tutorial

这些文件主要是:

  • scrapycfg:项目配置文件,一般不需要改
  • tutorial/:项目python模块,代码将从这里导入
  • tutorial/items.py:项目items文件
  • tutorial/pipelines.py:项目管道文件
  • tutorial/settings.py:项目配置文件
  • tutorial/spiders/:放置spider的目录

定义Item

Items是将要装载机抓取的数据的容器,跟python里面的字典差不多,但它提供更多的保护,如对未定义的字段填充,以防止拼写错误。

我们通过将需要的item模块化,来控制从dmoz.org获得的站点数据,比如说站点的名字、url和网站描述。定义一下这三种属性的域,编辑一下tuto目录下的items.py

from scrapy.item import Item, Field class DmozItem(Item):    title = Field()    link = Field()    desc = Field()

爬虫(Spider)

Spider是用户编写的类,用于从一个域(或域组)中抓取信息。

它们定义了用于下载URL的初步列表,如何跟踪链接,以及如何来解析这些网页内容用于提取items。

要建立一个Spider,必须为scrapy.spider.BaseSpider创建一个子类,并确定三个主要的、强制的属性:

  • name:爬虫的识别名,它必须是唯一的,在不同的爬虫中你必须定义不同的名字
  • start_urls:爬虫开始爬的一个URL列表,爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些URLS开始,其他子URL将会从这些起始URL中继承性生成
  • parse():爬虫的方法,调用时候传入从每一个URL传回的Response对象作为参数,response将会是parse方法的唯一的一个参数,这个方法负责解析返回的数据,匹配抓取的数据(解析为item)并跟踪更多的URL

在tutorial/spiders目录下,新建一个dmoz_spider.py的文件

from scrapy.spider import BaseSpider

class DmozSpider(BaseSpider):    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]        open(filename,‘wb‘).write(response.body)

爬虫运行

在终端输入下面命令:

[KANO@kelvin tutorial]$ scrapy crawl dmoz

你将会得到如下类似输出:

提取Item

Scrapy使用一种叫做XPath selectors的机制,它基于XPath表达式。

关于XPath表达式的提取,可以使用XPath checker插件,而chrome用户则可以直接使用F12查看XPath

Selectors 有三种方法

  • path():返回selectors列表, 每一个select表示一个xpath参数表达式选择的节点.
  • extract():返回一个unicode字符串,该字符串为XPath选择器返回的数据
  • re(): 返回unicode字符串列表,字符串作为参数由正则表达式提取出来

将代码加到原代码中,

from scrapy.spider import BaseSpiderfrom scrapy.selector import HtmlXPathSelector

class DmozSpider(BaseSpider):    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):        hxs = HtmlXPathSelector(response)        sites = hxs.path(‘//fieldset/ul/li‘)        for site in sites:            title = site.path(‘a/text()‘).extract()            link = site.path(‘a/@href‘).extract()            desc = site.path(‘text()‘).extract()            print title, link

Spiders希望将其抓取的数据存放到Item对象中。为了返回我们抓取数据,spider的最终代码应当是这样:

from scrapy.spider import BaseSpiderfrom scrapy.selector import HtmlXPathSelector

from tutorial.items import DmozItem

class DmozSpider(BaseSpider):   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):       hxs = HtmlXPathSelector(response)       sites = hxs.path(‘//fieldset/ul/li‘)       #sites = hxs.path(‘//ul/li‘)       items = []       for site in sites:           item = DmozItem()           item[‘title‘] = site.path(‘a/text()‘).extract()           item[‘link‘] = site.path(‘a/@href‘).extract()           item[‘desc‘] = site.path(‘text()‘).extract()           items.append(item)       return items

保存抓取的数据

保存信息的最简单的方法是通过Feed exports

scrapy crawl dmoz -o items.json -t json
时间: 2024-10-01 02:56:10

关于一只爬虫的相关文章

第 52 讲:论一只爬虫的自我修养

>>> import urllib.request>>> response = urllib.request.urlopen("http://www.fishc.com")>>> a = response.read() >>> a = a.decode("utf-8") >>> print(a) 课后作业: 0. 请问 URL 是"统一资源标识符"还是&qu

[转载]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程

我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Items):明确你想要抓取的目标 制作爬虫(Spider):制作爬虫开始爬取网页 存储内容(Pipeline):设计管道存储爬取内容 好的,基本流程既然确定了,那接下来就一步一步的完成就可以了. 1.新建项目(Project) 在空目录下按住Shift键右击,选择“在此处打开命令窗口”,输入一

那些年我们写过的爬虫

从写nodejs的第一个爬虫开始陆陆续续写了好几个爬虫,从爬拉勾网上的职位信息到爬豆瓣上的租房帖子,再到去爬知乎上的妹子照片什么的,爬虫为我打开了一扇又一扇新世界的大门.除了涨了很多姿势之外,与网管斗智斗勇也是一个比较有意思的事情.虽然很多东西都是浅尝辄止,但万事都有个由浅入深的过程嘛(天真脸~~) 一只爬虫的模样 爬虫?应该是长这样的吧: 其实,没有那么萌啦. 所谓爬虫,就是把目标网站的信息收集起来的一种工具.基本流程跟人访问网站是一样的,打开链接>>获取信息>>打开链接……这个

Scrapy爬虫框架的学习

第一步安装 首先得安装它,我使用的pip安装的 因为我电脑上面安装了两个python,一个是python2.x,一个是python3.x,所以为了区分,所以,在cmd中,我就使用命令:python2 -m pip install Scrapy  (注意我这里使用python2的原因是我给2个python重命名了一下) 安装之后,输入scrapy,出现如下图这样子的信息,表示成功安装了 如果有错误,可以参考一下:http://www.cnblogs.com/angelgril/p/7511741.

Node.js 网页瘸腿爬虫初体验

延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require('fs'); // 创建一个将流数据写入文件的WriteStream对象 var outstream=fs.createWriteStream('./1.txt'); /

零基础写python爬虫之使用Scrapy框架编写爬虫

网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便.使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Item

Python——网络爬虫

此篇文章继续跟着小甲鱼的视频来初学网络爬虫,除了小甲鱼的网站上可下载视频,发现b站上也有全套的视频哦,会比下载来的更方便些. 网络爬虫,又称为网页蜘蛛(WebSpider),非常形象的一个名字.如果你把整个互联网想象成类似于蜘蛛网一样的构造,那么我们这只爬虫,就是要在上边爬来爬去,顺便获得我们需 http://p.baidu.com/itopic/main/qlog?qid=c64a6162633964323133663100&type=questionloghttp://p.baidu.com

burpsuite2.0爬虫及扫描功能

crawl爬行 audit审计 在burpsuite中,爬虫和审计分为主动被动式. 被动式 在Dashboard仪表盘模块下,有关于爬虫和审计两个功能的设置: Live passive crawl from Proxy实时被动爬虫 Live audit from Proxy实时审计 被动式是几乎不额外构造请求进行爬虫和扫描,根据用户浏览网页进行常规请求,并对请求的数据进行简单分析. 主动式 在Dashboard仪表盘模块下,点击New scan,进行扫描配置. Scan details扫描细节

我的第一个Python爬虫——谈心得

2019年3月27日,继开学到现在以来,开了软件工程和信息系统设计,想来想去也没什么好的题目,干脆就想弄一个实用点的,于是产生了做“学生服务系统”想法.相信各大高校应该都有本校APP或超级课程表之类的软件,在信息化的时代能快速收集/查询自己想要的咨询也是种很重要的能力,所以记下了这篇博客,用于总结我所学到的东西,以及用于记录我的第一个爬虫的初生 先给大家分享一门我之前看过的课程,挺不错的,免费分享给大家 Python爬虫工程师必学 App数据抓取实战,内容官网:https://coding.im