zoukankan      html  css  js  c++  java
  • 【飞谷六期】爬虫项目1

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

    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语句如下图,其他的遇到再查好了。

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

  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/dplearning/p/4902622.html
Copyright © 2011-2022 走看看