Scrapy在shell中工作,但在我打电话给蜘蛛时则不行

时间:2014-02-19 20:55:22

标签: xpath web-crawler scrapy

过去几个小时我一直在研究这个问题,但无法弄清楚我做错了什么。当我使用scrapy shell中的选择器运行我的xpath状态时,该语句按预期工作。然而,当我尝试在我的蜘蛛中使用相同的语句时,我得到一个空集。有谁知道我做错了什么?

from scrapy.spider import Spider
from scrapy.selector import Selector
from TFFRS.items import Result

class AthleteSpider(Spider):
        name = "athspider"
        allowed_domains = ["www.tffrs.org"]
        start_urls = ["http://www.tffrs.org/athletes/3237431/",]

        def parse(self, response):
            sel = Selector(response)
            results = sel.xpath("//table[@id='results_data']/tr")
            items = []
            for r in results:
                item = Result()
                item['event'] = r.xpath("td[@class='event']").extract()
                items.append(item)
            return items

3 个答案:

答案 0 :(得分:2)

当蜘蛛查看时,您的网址不包含任何内容。要调试此类问题,您应该在解析方法中使用scrapy.shell.inspect_response,使用它如下:

 from scrapy.shell import inspect_response

 class AthleteSpider(Spider):

 # all your code    
      def parse(self, response):
         inspect_response(response)

然后当你做

scrapy crawl <your spider>

你将从蜘蛛中获得一个shell。你应该这样做:

In [1]: view(response)

这将显示此特定响应,因为它会查找此特定蜘蛛。

答案 1 :(得分:0)

尝试使用HtmlXPathSelector提取xpath。 从http部分删除start_urls。表id也是您未在xpath中正确输入的内容。尝试使用inspect元素为要抓取的数据获取正确的xpath。

还考虑从docs:

更改函数名称
  

警告

     

编写爬网蜘蛛规则时,请避免使用parse作为回调   CrawlSpider使用parse方法本身来实现其逻辑。   因此,如果您覆盖解析方法,则爬行蜘蛛将不再存在   工作

答案 2 :(得分:0)

Scrapy蜘蛛必须采用特定的方法;示例包括:parsestart_requests,但docs中还有其他人 因此,如果您没有为此实施这些方法,那么您将遇到问题。在我的情况下问题是我有一个拼写错误,我的函数名称是 start_request 而不是 start_requests
所以要确保你的骨架是这样的:

class MySpider(scrapy.Spider):
    name = "name"
    allowed_domains = ["https://example.com"]
    start_urls = ['https://example.com/']

    def start_requests(self):
        #start_request method

    def parse(self, response):
        #parse method