Scrapy爬虫 -- 03

关于数据过滤,scrapy提供xpath和css两种过滤器(selector),一般xpath使用的较多,另外我对css也不算熟。这里主要是xpath。

关于xpath,是一种专门在 XML 文档中查找信息的语言。详细教程可以看这里:http://www.w3school.com.cn/xpath/,不过对于刚入门的人来说不用那么复杂。官网的tutorial给的一些示例足够基本入门的。

以下为示例:

/html/head/title: selects the <title> element, inside the <head>element of a HTML document (选择html头部的标题元素)
/html/head/title/text(): selects the text inside the aforementioned<title> element.(选择上例中元素的文本)
//td: selects all the <td> elements(选择所有td项目)
//div[@class="mine"]: selects all div elements which contain an attribute class="mine"(选择class="mine"的div标签)

为了方便调式,scrapy提供了交互式的方式对网站进行抓取分析(注意一定要有"",否则。。。):

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

正常的话会出现以下内容:

[ ... Scrapy log here ... ]

2014-01-23 17:11:42-0400 [default] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/> (referer: None)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x3636b50>
[s]   item       {}
[s]   request    <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>
[s]   response   <200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>
[s]   settings   <scrapy.settings.Settings object at 0x3fadc50>
[s]   spider     <Spider ‘default‘ at 0x3cebf50>
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser

In [1]:

这样你就获得了crawler等六个类,现在我们只关注response类,正如字面意思,response代表返回的网页内容,使用view(response)就可以调用默认的浏览器查看抓取的页面(我的是firefox)。response.body存放着html的源代码,你可以在交互程序下查看。不过一般没有换行和对齐,十分惨烈。。。

response中包含了四个基本方法,用于数据过滤:

  • xpath(): returns a list of selectors, each of them representing the nodes selected by the xpath expression given as argument.
  • css(): returns a list of selectors, each of them representing the nodes selected by the CSS expression given as argument.
  • extract(): returns a unicode string with the selected data.
  • re(): returns a list of unicode strings extracted by applying the regular expression given as argument.

其中xpath()就是选择器,而extract()方法则会返回html标签之间的unicode内容,re()则是调用正则的接口(我恨正则)。

示例如下:

In [1]: response.xpath(‘//title‘)
Out[1]: [<Selector xpath=‘//title‘ data=u‘<title>Open Directory - Computers: Progr‘>]

In [2]: response.xpath(‘//title‘).extract()
Out[2]: [u‘<title>Open Directory - Computers: Programming: Languages: Python: Books</title>‘]

In [3]: response.xpath(‘//title/text()‘)
Out[3]: [<Selector xpath=‘//title/text()‘ data=u‘Open Directory - Computers: Programming:‘>]

In [4]: response.xpath(‘//title/text()‘).extract()
Out[4]: [u‘Open Directory - Computers: Programming: Languages: Python: Books‘]

In [5]: response.xpath(‘//title/text()‘).re(‘(\w+):‘)
Out[5]: [u‘Computers‘, u‘Programming‘, u‘Languages‘, u‘Python‘]

response.xpath()将会返回selector的一个列表,你可以对其中的元素再次调用xpath, extract()等函数。

就像这样:

>>> response.xpath(‘//title‘)[0].xpath(‘text()‘).extract()
[u‘DMOZ - Computers: Programming: Languages: Python: Books‘]

剩下的事就是把元素存入items之中了,然后通过pipeline存放到你想要的数据格式:

import scrapyfrom tutorial.items import DmozItemclass DmozSpider(scrapy.Spider):
    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):
        for sel in response.xpath(‘//ul/li‘):
            item = DmozItem()
            item[‘title‘] = sel.xpath(‘a/text()‘).extract()
            item[‘link‘] = sel.xpath(‘a/@href‘).extract()
            item[‘desc‘] = sel.xpath(‘text()‘).extract()
            yield item

这里说一下yield这个关键字,yield在python中被称为generator,作用是将循环转化为iterator并返回,详情可以看这里:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

时间: 2024-12-23 15:52:14

Scrapy爬虫 -- 03的相关文章

股票数据Scrapy爬虫

功能描述: 技术路线:scrapy 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 数据网站的确定 获取股票列表: 东方财富网:http://quote.eastmoney.com/stock_list.html 获取个股信息: 百度股票:https://gupiao.baidu.com/stock/ 单个股票:https://gupiao.baidu.com/stock/sz002439.html 步骤: 步骤1:建立工程和Spider模板 D:\pycodes>scra

dota玩家与英雄契合度的计算器,python语言scrapy爬虫的使用

首发:个人博客,更新&纠错&回复 演示地址在这里,代码在这里. 一个dota玩家与英雄契合度的计算器(查看效果),包括两部分代码: 1.python的scrapy爬虫,总体思路是page->model->result,从网页中提取数据,组成有意义的数据结构,再拿这数据结构做点什么. 在这个项目中,爬虫的用处是从游久网dota数据库上抓取dota英雄和物品的数据和照片存到本地磁盘,数据存为json格式,方便在网页应用中直接使用. 2.网页应用,使用dota英雄数据.自己编写的小伙

如何让你的scrapy爬虫不再被ban

前面用scrapy编写爬虫抓取了自己博客的内容并保存成json格式的数据(scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据)和写入数据库(scrapy爬虫成长日记之将抓取内容写入mysql数据库).然而,这个爬虫的功能还是过于弱小,一旦目标网站设置了爬虫的限制,我们的爬虫也就失效了.因此这里重点讲述一下如何避免scrapy爬虫被ban.本门的所有内容都是基于前面两篇文章的基础上完成的,如果您错过了可以点击此回看:scrapy爬虫成长日记之创建工程-抽取数据-保存为json格

2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报

1.项目准备:网站地址:http://quanzhou.tianqi.com/ 2.创建编辑Scrapy爬虫: scrapy startproject weather scrapy genspider HQUSpider quanzhou.tianqi.com 项目文件结构如图: 3.修改Items.py: 4.修改Spider文件HQUSpider.py: (1)先使用命令:scrapy shell http://quanzhou.tianqi.com/   测试和获取选择器: (2)试验选择

如何让你的scrapy爬虫不再被ban之二(利用第三方平台crawlera做scrapy爬虫防屏蔽)

我们在做scrapy爬虫的时候,爬虫经常被ban是常态.然而前面的文章如何让你的scrapy爬虫不再被ban,介绍了scrapy爬虫防屏蔽的各种策略组合.前面采用的是禁用cookies.动态设置user agent.代理IP和VPN等一系列的措施组合来防止爬虫被ban.除此以外官方文档还介绍了采用Google cache和crawlera的方法.这里就着重介绍一下如何利用crawlera来达到爬虫不被ban的效果.crawlera是一个利用代理IP地址池来做分布式下载的第三方平台,除了scrap

基于python的scrapy爬虫抓取京东商品信息

这是上的第二节爬虫课程的课后作业:抓取京东某类商品的信息,这里我选择了手机品类. 使用scrapy爬虫框架,需要编写和设置的文件主要有phone.py , pipelines.py , items.py , settings.py , 其中主要编写的是前两个文件,最后一个文件主要设置破解反爬方法. phone.py编写程序如下: import scrapy from scrapy.http import Request from jd_phone.items import JdPhoneItem

scrapy爬虫成长日记之将抓取内容写入mysql数据库

前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我们日常的实际应用,接下来看下如何将抓取的内容保存在常见的mysql数据库中吧. 说明:所有的操作都是在“scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据”的基础上完成,如果您错过了这篇文章可以移步这里查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 环

scrapy爬虫1--基础设置篇

scrapy作为一个用python编写的网络爬虫,继承了python简单易用的特点,目前已经在很多项目中所使用. 这里也是因为工作中的需要,把scrapy使用过程中的一些心得和遇到的问题记录下来以便加深记忆. scrapy安装的过程就不在这里详述了,大家安装都会碰到各种不同的问题,主要还是因为python版本,vc++版本以及scrapy版本的兼容性引起的. 这里也附上我的安装及运行环境:windows7+python2.6+Microsoft Visual Studio 2010+scrapy

一个咸鱼的python爬虫之路(五):scrapy 爬虫框架

介绍一下scrapy 爬虫框架 安装方法 pip install scrapy 就可以实现安装了.我自己用anaconda 命令为conda install scrapy. 1 Engine从Spider处获得爬取请求(Request)2Engine将爬取请求转发给Scheduler,用于调度 3 Engine从Scheduler处获得下一个要爬取的请求4 Engine将爬取请求通过中间件发送给Downloader5 爬取网页后,Downloader形成响应(Response)通过中间件发给En