Scrapy:蜘蛛什么都不回报

时间:2014-06-18 17:59:22

标签: python python-2.7 web-scraping web-crawler scrapy-spider

这是我第一次创建蜘蛛,尽管我付出了努力,它仍然没有返回我的csv导出。我的代码是:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector

class Emag(CrawlSpider):
    name = "emag"
    allowed_domains = ["emag.ro"]
    start_urls = [
        "http://www.emag.ro/"]

    rules = (Rule(SgmlLinkExtractor(allow=(r'www.emag.ro')), callback="parse", follow= True))

    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//a/@href').extract()
        for site in sites:
            site = str(site)

        for clean_site in site:
            name = clean_site.xpath('//[@id=""]/span').extract()
            return name

问题是,如果我打印网站,它会给我一个URL列表,这没关系。如果我在scrapy shell中的一个URL中搜索名称,它会找到它。问题是当我抓取所有链接中的所有名称时。我使用" scrapy crawl emag> emag.cs​​v"

运行它

你能给我一个提示吗?

2 个答案:

答案 0 :(得分:1)

蜘蛛中的多个问题:

  • rules应该是最后一个括号之前的可迭代,缺少逗号
  • 未指定Item - 您需要定义Item类并从蜘蛛parse()回调
  • 返回/产生它

这是蜘蛛的固定版本:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Field, Item


class MyItem(Item):
    name = Field()


class Emag(CrawlSpider):
    name = "emag"
    allowed_domains = ["emag.ro"]
    start_urls = [
        "http://www.emag.ro/"]

    rules = (Rule(SgmlLinkExtractor(allow=(r'www.emag.ro')), callback="parse", follow=True), )

    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//a/@href')
        for site in sites:
            item = MyItem()
            item['name'] = site.xpath('//[@id=""]/span').extract()
            yield item

答案 1 :(得分:0)

一个问题可能是,该网站的robots.txt禁止您访问 您可以从日志跟踪中进行检查。 如果是这样,请转到您的settings.py并使ROBOTSTXT_OBEY = False 那解决了我的问题