将包含爬网详细信息和解析函数的类调用到另一个类

时间:2016-01-20 06:02:21

标签: python scrapy

我对scrapy很新。我有一个非常基本的疑问,但找不到解决方案。 我的代码:

import os
from boto import log
from scrapy.utils.project import get_project_settings

import scrapy
from scrapy.crawler import CrawlerProcess, Crawler
from scrapy.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.settings import Settings
from scrapy.utils import reactor

from testing.items import testingItem
from testing.spiders.MySpider1 import Spider1
from scrapy.contrib.spiders import CrawlSpider, Rule
from multiprocessing import Pool
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
class MySpider(CrawlSpider):
    name = "MySpider"
a=Spider1()
a.parse()

*********上面的代码在一个单独的页面***********

import scrapy
from testing.items import testingItem
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.crawler import CrawlerProcess
from multiprocessing import Process, Queue
class Spider1():

 def parse(self, response):

  allowed_domains = ["dmoz.org"]
  start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
  "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
        ]



for sel in response.xpath('//ul/li'):
          item = testingItem()
          item['title'] = sel.xpath('a/text()').extract()
          item['link'] = sel.xpath('a/@href').extract()
          item['desc'] = sel.xpath('text()').extract()
          yield item

问题是我想用上面提到的解析功能爬上上面提到的网站。我无法调用该函数并无错误地抓取。

1 个答案:

答案 0 :(得分:1)

嗯,错误消息很明确:您在没有parse参数的情况下调用response函数。您需要一个响应让scrapy解析网站信息。如果你想启动蜘蛛,你需要用另一种方式调用它。

一般方法是使用

从命令行启动一个蜘蛛
scrapy crawl <spider_name>

其中<spider_name>必须替换为要开始的蜘蛛名称。

第二种方法更复杂,但它允许您从脚本运行scrapy。我想这就是你想要实现的目标。

在这种情况下,您必须设置CrawlerProcessstart()

settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl(Spider1)
process.start()

这将启动蜘蛛 - 它将处理start_urls中的所有网站以及Request函数中parse的所有网站。