Scrapy爬行蜘蛛返回破碎的网址

时间:2015-03-20 03:25:48

标签: scrapy scrapy-spider

我正在尝试创建一个简单的爬行蜘蛛,但是response.url似乎已经被破坏了。

我目前正在运行的代码是:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor

from teatrorecur.items import TeatrorecurItem

class Teatrorecurspider(CrawlSpider):
    name = "teatrorecurspider"
    allowed_domains = ["cartelera.com.uy"]
    start_urls = (
        'http://www.cartelera.com.uy/apeliculafunciones.aspx?,,PELICULAS,OBRA,0,26',
    )

    rules = (
        Rule(LinkExtractor(allow=('CINE&OBRA&-1&29', )), callback='parse_item', follow=False),
        #Rule(LinkExtractor(restrict_xpaths='//a[@href="CINE%2COBRA%2C-1%2C29"]'), follow=False, callback='parse_item'),
        #Rule(LinkExtractor(allow=('CINE&OBRA&-1&29$', )), callback='parse_item', follow=False),
    )



    def parse_item(self, response):
        item = TeatrorecurItem()
        item['url']=response.url
        yield item

我从此代码中获取的示例网址是

<200 http://www.cartelera.com.uy/apeliculafunciones.aspx?-1=&12415=&29=&CINE=&OBRA=>

但页面中的相应元素具有以下href值

<a href="http://www.cartelera.com.uy/apeliculafunciones.aspx?12415&&CINE&OBRA&-1&29">

如你所见,.aspx之后的字符串?搞砸了,我不知道出了什么问题。

1 个答案:

答案 0 :(得分:1)

LinkExtractor有一个名为canonicalize的选项,默认为True。

将其设置为False,如下所示:

rules = (
    Rule(LinkExtractor(allow=('CINE&OBRA&-1&29',), canonicalize=False), callback='parse_item', follow=False),
)

这将阻止LinkExtractor对canonicalize_url def所描述的网址进行更改。