纸条上的蜘蛛

2024-09-21 07:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从脚本而不是scrap crawl运行我的蜘蛛

我找到了这一页

http://doc.scrapy.org/en/latest/topics/practices.html

但实际上它并没有说明该把脚本放在哪里。

有什么帮助吗?


Tags: org脚本httpdochtmllatestenscrap
3条回答

您只需创建一个普通的Python脚本,然后使用Scrapy的命令行选项^{},它允许您运行一个spider,而不必创建一个项目。

例如,您可以创建一个文件stackoverflow_spider.py,其内容如下:

import scrapy

class QuestionItem(scrapy.item.Item):
    idx = scrapy.item.Field()
    title = scrapy.item.Field()

class StackoverflowSpider(scrapy.spider.Spider):
    name = 'SO'
    start_urls = ['http://stackoverflow.com']
    def parse(self, response):
        sel = scrapy.selector.Selector(response)
        questions = sel.css('#question-mini-list .question-summary')
        for i, elem in enumerate(questions):
            l = scrapy.contrib.loader.ItemLoader(QuestionItem(), elem)
            l.add_value('idx', i)
            l.add_xpath('title', ".//h3/a/text()")
            yield l.load_item()

然后,如果正确安装了scrapy,则可以使用以下命令运行它:

scrapy runspider stackoverflow_spider.py -t json -o questions-items.json

简单明了:)

检查一下official documentation。我会做一些改变,这样你就可以控制蜘蛛只在你做python myscript.py的时候运行,而不是每次你从它导入的时候运行。只需添加一个if __name__ == "__main__"

import scrapy
from scrapy.crawler import CrawlerProcess

class MySpider(scrapy.Spider):
    # Your spider definition
    pass

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

    process.crawl(MySpider)
    process.start() # the script will block here until the crawling is finished

现在将文件保存为myscript.py,并运行“python myscript.py”。

享受吧!

幸运的是,scrapy源代码是开放的,因此您可以遵循crawl command的工作方式,并在代码中执行相同的操作:

...
crawler = self.crawler_process.create_crawler()
spider = crawler.spiders.create(spname, **opts.spargs)
crawler.crawl(spider)
self.crawler_process.start()

相关问题 更多 >

    热门问题