2011-08-12 5 views
2

私はウェブサイトをスクラップしようとしていますが、私はリンクをたどるための治療を受けることができず、Pythonのエラーも出ません。私はそれが正規表現である可能性があると思ったが、リンクをたどることを試みるために "。*"を試みたが、どちらもうまくいかなかった。メソッド "parse"は機能しますが、私は "sinopsis.aspx"とコールバックparse_peliculasに従う必要があります。リンクをたどるためにスクラップを取得できない

編集:parseメソッドにコメントすると、ルールが動作します。parse_peliculasが実行され、今行っているのは、別の名前に解析メソッドを変更し、コールバックを使用してルールを作成しますが、

これは私のクモコードです:クロールスパイダーのルールを記述する場合は

import re 

from scrapy.selector import HtmlXPathSelector 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from Cinesillo.items import CinemarkItem, PeliculasItem 

class CinemarkSpider(CrawlSpider): 
    name = 'cinemark' 
    allowed_domains = ['cinemark.com.mx'] 
    start_urls = ['http://www.cinemark.com.mx/smartphone/iphone/vercartelera.aspx?fecha=&id_theater=555', 
        'http://www.cinemark.com.mx/smartphone/iphone/vercartelera.aspx?fecha=&id_theater=528'] 


    rules = (Rule(SgmlLinkExtractor(allow=(r'sinopsis.aspx.*',)), callback='parse_peliculas', follow=True),) 

    def parse(self, response): 
     item = CinemarkItem() 
     hxs = HtmlXPathSelector(response) 
     cine = hxs.select('(//td[@class="title2"])[1]') 
     direccion = hxs.select('(//td[@class="title2"])[2]') 

     item['nombre'] = cine.select('text()').extract() 
     item['direccion'] = direccion.select('text()').extract() 
     return item 

    def parse_peliculas(self, response): 
     item = PeliculasItem() 
     hxs = HtmlXPathSelector(response) 
     titulo = hxs.select('//td[@class="pop_up_title"]') 
     item['titulo'] = titulo.select('text()').extract() 
     return item 

おかげ

答えて

7

、 CrawlSpiderはそのロジックを実装するために、解析方法自体を使用しているため、コールバックとして解析を使用しないでください。 したがって、解析メソッドをオーバーライドすると、クロールスパイダーはもはや になりません。

http://readthedocs.org/docs/scrapy/en/latest/topics/spiders.html

+0

はい、私はすでにそれを知っています。私はparserをparser_cinemaにリネームすることを考えていましたが、どうすればそのメソッドを呼び出すことができますか? – sinnet3000

+1

各ルールについて、1つのコールバックメソッドを提供します。すでにコールバックメソッド 'parse_peliculas'を提供しています。 'parse 'メソッドを削除するだけです。 – jazz

関連する問題