我们可以在scrapy shell之外运行scrapy代码吗?

时间:2018-03-09 12:23:23

标签: python web-scraping scrapy

我正在尝试使用Scrapy构建一个爬虫。 Scrapy的官方文档或博客中的每个教程,我看到人们在.py代码中创建一个类并通过scrapy shell执行它。

在他们的主页上,给出了以下示例

import scrapy

class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://blog.scrapinghub.com']

    def parse(self, response):
        for title in response.css('h2.entry-title'):
            yield {'title': title.css('a ::text').extract_first()}

        for next_page in response.css('div.prev-post > a'):
            yield response.follow(next_page, self.parse)

然后使用

运行代码
scrapy runspider myspider.py

我无法找到以可以用

之类的方式编写相同代码的方法
python myspider.py

我还查看了他们网站的Requests and response部分,了解如何在shell中处理请求和响应,但尝试在python shell中运行这些代码

>> python myspider.py

没有显示任何内容。任何有关如何转换代码以使其耗尽scrapy shell的指导,或指向任何详细说明的文档的指针都将受到赞赏。

修改 请不要过分夸大您的匿名优势。如果你有一个有效的downvote点,请在你投票后在评论中提出你的观点。

1 个答案:

答案 0 :(得分:3)

您可以使用CrawlerProcess在Python主脚本中运行您的蜘蛛,并使用python myspider.py

运行

例如:

import scrapy
from scrapy.crawler import CrawlerProcess


class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://blog.scrapinghub.com']

    def parse(self, response):
        for title in response.css('h2.entry-title'):
            yield {'title': title.css('a ::text').extract_first()}

        for next_page in response.css('div.prev-post > a'):
            yield response.follow(next_page, self.parse)


if __name__ == '__main__':
    class MySpider(scrapy.Spider):
        # Your spider definition
        ...


    process = CrawlerProcess({
        'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
    })

    process.crawl(BlogSpider)
    process.start()

有用的链接 https://doc.scrapy.org/en/latest/topics/practices.html