笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

Scrapy 教程

发布者: 笨鸟自学网



如何运行我们的蜘蛛

要使蜘蛛正常工作,请转到项目的顶级目录并运行:

scrapy crawl quotes

此命令运行名为的spider quotes 我们刚刚添加的,这将发送一些 quotes.toscrape.com 领域。您将得到类似于以下内容的输出:

... (omitted for brevity)
2016-12-16 21:24:05 [scrapy.core.engine] INFO: Spider opened
2016-12-16 21:24:05 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-12-16 21:24:05 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (404) <GET http://quotes.toscrape.com/robots.txt> (referer: None)
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/2/> (referer: None)
2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-1.html
2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-2.html
2016-12-16 21:24:05 [scrapy.core.engine] INFO: Closing spider (finished)
...

现在,检查当前目录中的文件。您应该注意到已经创建了两个新文件: quotes-1.html 和 引用-2.HTML, 将各个URL的内容作为 parse 方法指示。

注解

如果您想知道为什么我们还没有解析HTML,请稍等,我们很快就会讨论这个问题。

引擎盖下面发生了什么?

SCrapy计划 scrapy.Request 方法返回的对象 start_requests 蜘蛛的方法。在接收到每个请求的响应后,它会实例化 Response 对象,并调用与请求关联的回调方法(在本例中, parse 方法)将响应作为参数传递。

启动请求方法的快捷方式

而不是实现 start_requests() 方法,该方法生成 scrapy.Request 对象,您可以只定义一个 start_urls 具有URL列表的类属性。然后,此列表将由的默认实现使用 start_requests() 要为爬行器创建初始请求,请执行以下操作:

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
        'http://quotes.toscrape.com/page/2/',
    ]

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = f'quotes-{page}.html'
        with open(filename, 'wb') as f:
            f.write(response.body)

这个 parse() 方法来处理这些URL的每个请求,即使我们还没有显式地告诉Scrapy这样做。发生这种情况是因为 parse() 是Scrapy的默认回调方法,在没有显式分配回调的情况下为请求调用该方法。


上一篇:安装指南下一篇:命令行工具

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 11:59 , Processed in 0.028988 second(s), 17 queries .

© 2001-2020

返回顶部