相关疑难解决方法(0)

Scrapy非常基本的例子

嗨我在我的Mac上安装了Python Scrapy,我试图在他们的网站上关注第一个例子.

他们试图运行命令:

scrapy crawl mininova.org -o scraped_data.json -t json
Run Code Online (Sandbox Code Playgroud)

我不太明白这是什么意思?看起来scrapy原来是一个单独的程序.而且我认为他们没有一个名为crawl的命令.在示例中,它们有一段代码,它是MininovaSpider类和TorrentItem的定义.我不知道这两个类应该去哪里,转到同一个文件,这个python文件的名称是什么?

python scrapy web-scraping

20
推荐指数
2
解决办法
2万
查看次数

脚本中的Scrapy爬行总是在抓取后阻止脚本执行

我按照本指南http://doc.scrapy.org/en/0.16/topics/practices.html#run-scrapy-from-a-script从我的脚本运行scrapy.这是我的脚本的一部分:

    crawler = Crawler(Settings(settings))
    crawler.configure()
    spider = crawler.spiders.create(spider_name)
    crawler.crawl(spider)
    crawler.start()
    log.start()
    reactor.run()
    print "It can't be printed out!"
Run Code Online (Sandbox Code Playgroud)

它应该工作:访问页面,刮取所需信息并存储我告诉它的输出json(通过FEED_URI).但是当蜘蛛完成他的工作时(我可以通过输出json中的数字看到它)我的脚本执行不会恢复.可能它不是scrapy问题.并且应该在扭曲的反应堆中找到答案.我怎么能释放线程执行?

python twisted scrapy

19
推荐指数
2
解决办法
8383
查看次数

scrapy从脚本运行蜘蛛

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

我找到了这个页面

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

但实际上并没有说该放哪个脚本.

有什么帮助吗?

python scrapy python-2.7

13
推荐指数
3
解决办法
2万
查看次数

在Scrapy> = 0.14中以编程方式启动爬虫的最简单方法是什么?

我想从Python模块开始Scrapy中的爬虫.我想基本上模仿的本质$ scrapy crawl my_crawler -a some_arg=value -L DEBUG

我有以下几点:

  • 该项目的settings.py文件
  • 物品和管道
  • 一个爬虫类,它扩展了BaseSpider并在初始化时需要参数.

我可以很高兴使用scrapy上面指定的命令运行我的项目,但是我正在编写集成测试,我想以编程方式:

  • 使用settings.py具有my_crawlername属性的设置和具有name属性的爬虫启动爬网(我可以从我的测试模块轻松实例化此类.
  • 我希望所有的管道和中间件都按照规范使用settings.py.
  • 在抓取器完成之前,我很高兴阻止该进程.管道将数据转储到数据库中,这是在我完成爬网以完成测试后我将要检查的数据库的内容.

那么,任何人都可以帮助我吗?我在网上看到过一些例子,但它们要么是针对多个蜘蛛的黑客,要么是绕过Twisted's阻挡自然,或者不使用Scrapy 0.14或更高版本.我只需要一些非常简单的东西.:-)

python scrapy web-scraping

9
推荐指数
1
解决办法
2079
查看次数

从网址列表下载<非常大>页数的最佳方法是什么?

我要下载并保存在数据库中的列表中有一个大于100,000个url(不同的域),以便进行进一步处理和修改。

使用scrapy代替python的多处理/多线程处理是否明智?如果是,我如何编写独立脚本来执行相同操作?

另外,请随意提出其他令人敬畏的方法。

python multithreading web-crawler multiprocessing scrapy

5
推荐指数
1
解决办法
846
查看次数

在Scrapy中将列表作为参数传递

我正在尝试使用Flask和Scrapy构建应用程序.我必须将list网址传递给蜘蛛.我尝试使用以下语法:

__init__: in Spider
self.start_urls = ["http://www.google.com/patents/" + x for x in u]

Flask Method
u = ["US6249832", "US20120095946"]
os.system("rm static/s.json; scrapy crawl patents -d u=%s -o static/s.json" % u)
Run Code Online (Sandbox Code Playgroud)

我知道类似的事情可以通过阅读具有所需网址的文件来完成,但是我可以通过网址列表进行抓取吗?

python scrapy flask scrapy-spider

5
推荐指数
1
解决办法
1873
查看次数

从Python脚本将参数传递给Scrapy Spider

我只提到我在发布这个问题之前提到的一些问题(在发布这个问题之前,我目前没有链接到我提到过的所有问题) - :

我可以完全运行此代码,如果我没有传递参数并要求用户从BBSpider类输入(没有主函数 - 在name ="dmoz"行下方),或者将它们作为预定义(即静态)参数.

我的代码在这里.

我基本上试图从Python脚本执行Scrapy蜘蛛而不需要任何其他文件(甚至是设置文件).这就是为什么我在代码本身内部也指定了设置.

这是我执行此脚本时的输出 - :

http://bigbasket.com/ps/?q=apple
2015-06-26 12:12:34 [scrapy] INFO: Scrapy 1.0.0 started (bot: scrapybot)
2015-06-26 12:12:34 [scrapy] INFO: Optional features available: ssl, http11
2015-06-26 12:12:34 [scrapy] INFO: Overridden settings: {}
2015-06-26 12:12:35 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
None
2015-06-26 12:12:35 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-06-26 12:12:35 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, …
Run Code Online (Sandbox Code Playgroud)

python arguments scrapy web-scraping scrapy-spider

5
推荐指数
1
解决办法
2087
查看次数

Scrapy 将两个蜘蛛放在一个文件中

我在一个文件中写了两个蜘蛛。当我运行时scrapy runspider two_spiders.py,只有第一个 Spider 被执行。如何在不将文件拆分为两个文件的情况下运行它们。

two_spiders.py:

import scrapy

class MySpider1(scrapy.Spider):
    # first spider definition
    ...

class MySpider2(scrapy.Spider):
    # second spider definition
    ...
Run Code Online (Sandbox Code Playgroud)

python scrapy

3
推荐指数
1
解决办法
2652
查看次数

我们可以在scrapy shell之外运行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)
Run Code Online (Sandbox Code Playgroud)

然后代码运行使用

scrapy runspider myspider.py
Run Code Online (Sandbox Code Playgroud)

我无法找到一种可以用类似的方式执行的方式来编写相同的代码

python myspider.py
Run Code Online (Sandbox Code Playgroud)

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

( >> python myspider.py)

没有显示任何东西。任何有关如何转换代码以使其用完scrapy shell 的指导,或指向详细说明这一点的任何文档的指针,将不胜感激。

编辑 Downvoters 请不要过度利用您的匿名性。如果您有一个有效的反对意见,请在您反对后在评论中提出您的观点。

python scrapy web-scraping

2
推荐指数
1
解决办法
1127
查看次数