码迷,mamicode.com
首页 > 其他好文 > 详细

【飞谷六期】爬虫项目1

时间:2015-10-22 21:04:57      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

报名了飞谷六期的爬虫项目,但是自己相关的基础还是较弱,每天都有种无所事事的感觉。决定还是记录一下每天学习到的知识,自己看看也知道学习了些什么。

 

1.XShell连接阿里云,Xftp传输文件

2.把例子的文件拷贝出来后,link文件夹中的代码如图:

技术分享

开始看到这些文件,我想说什么鬼。然后看了一下 Scrapy入门,得知,这些文件是在新建scrapy项目后自动生成的。如果建立一个名叫tutorial的新项目,可以输入命令(我都是用的飞谷云提供的环境,linux的)

scrapy startproject tutorial

然后就会生成一个tutorial目录

tutorial/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

 

对比了一下新生成的这些文件和给出的例子文件,发现大多数的文件没有改动,只有

①items.py有少量变化

②spiders文件夹下需要自己写一个py文件,给出具体的爬虫代码。

这两个文件中具体要添加什么代码呢?我也不会,就先照着Scrapy入门的例子抄一下吧

items.py

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/topics/items.html

from scrapy.item import Item, Field

class TutorialItem(Item):
    # define the fields for your item here like:
    # name = Field()
    pass

class DmozItem(Item):
    title = Field()
    link = Field()
    desc = Field()

spiders文件夹下新建dmoz_spider.py

import scrapy

class DmozSpider(scrapy.spiders.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):
        filename = response.url.split("/")[-2]
        with open(filename, wb) as f:
            f.write(response.body)
split("/")[-2]:是指以"/"为分隔符分割后,选取倒数第二的部分。 python/Books/分解后的结果是python Books 空,倒数第二个就是Books

在有scrapy.cfg的文件夹下运行

scrapy crawl dmoz

结果,尼玛居然报错了/(ㄒoㄒ)/~~

技术分享

去问万能的度娘,度娘说是因为我的scrapy的版本太低了,应该看这份教程orz

 

对比了一下,发现items.py里面没变化,就是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]
        with open(filename, wb) as f:
            f.write(response.body)

运行,注意后面的dmoz就是dmoz_spider.py文件中name中的字符,如果写了其他的名字要改的。

scrapy crawl dmoz

成功了~好开心~可以得到相应页面源码的文件了~

 

刚才发生的事情:

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

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

 

Shell中使用Selector选择器

可以通过如下命令启动shell:

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

结果是这个样子的

技术分享

得到信息头,可以通过输入:

response.headers

技术分享

得到信息内容,可以通过输入:

response.body

 

有两个选择器可以用于选择内容中的有用信息,分别是hxs和xxs(注意,这个是老版本的,新版本的语句变了)。例:

hxs.select(/html/head/title)

括号里面写的其实是一个XPath语句

最有用的XPath语句如下图,其他的遇到再查好了。

技术分享

 

这样,通过选择器,我们就可以提取有用信息了。

【飞谷六期】爬虫项目1

标签:

原文地址:http://www.cnblogs.com/dplearning/p/4902622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!