我对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
问题是我想用上面提到的解析功能爬上上面提到的网站。我无法调用该函数并无错误地抓取。
答案 0 :(得分:1)
嗯,错误消息很明确:您在没有parse
参数的情况下调用response
函数。您需要一个响应让scrapy解析网站信息。如果你想启动蜘蛛,你需要用另一种方式调用它。
一般方法是使用
从命令行启动一个蜘蛛scrapy crawl <spider_name>
其中<spider_name>
必须替换为要开始的蜘蛛名称。
第二种方法更复杂,但它允许您从脚本运行scrapy。我想这就是你想要实现的目标。
在这种情况下,您必须设置CrawlerProcess
和start()
:
settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl(Spider1)
process.start()
这将启动蜘蛛 - 它将处理start_urls
中的所有网站以及Request
函数中parse
的所有网站。