Frage

Dies ist der Code für Spyder1, die ich innerhalb Scrapy Rahmen zu schreiben versucht habe:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from firm.items import FirmItem

class Spider1(CrawlSpider):
    domain_name = 'wc2'
    start_urls = ['http://www.whitecase.com/Attorneys/List.aspx?LastName=A']
    rules = (
        Rule(SgmlLinkExtractor(allow=["hxs.select(
            '//td[@class='altRow'][1]/a/@href').re('/.a\w+')"]), 
            callback='parse'),
    )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        JD = FirmItem()
        JD['school'] = hxs.select(
                   '//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)'
        )
        return JD    

SPIDER = Spider1()

Die Regex in der rules erfolgreich zieht alle Bio-URLs, die ich von Anfang an url wollen:

>>> hxs.select(
...             '//td[@class="altRow"][1]/a/@href').re('/.a\w+')
[u'/cabel', u'/jacevedo', u'/jacuna', u'/aadler', u'/zahmedani', u'/tairisto', u
'/zalbert', u'/salberts', u'/aaleksandrova', u'/malhadeff', u'/nalivojvodic', u'
/kallchurch', u'/jalleyne', u'/lalonzo', u'/malthoff', u'/valvarez', u'/camon',
u'/randerson', u'/eandreeva', u'/pangeli', u'/jangland', u'/mantczak', u'/darany
i', u'/carhold', u'/marora', u'/garrington', u'/jartzinger', u'/sasayama', u'/ma
sschenfeldt', u'/dattanasio', u'/watterbury', u'/jaudrlicka', u'/caverch', u'/fa
yanruoh', u'/razar']
>>>

Aber wenn ich den Code ausführen ich

[wc2] ERROR: Error processing FirmItem(school=[]) - 

[Failure instance: Traceback: <type 'exceptions.IndexError'>: list index out of range

Dies ist der FirmItem in Items.py

from scrapy.item import Item, Field

class FirmItem(Item):
    school = Field()

    pass

Können Sie mir helfen, zu verstehen, wo der Index-Fehler auftritt?

Es scheint mir, dass es etwas mit SgmLinkExtractor .

Ich habe versucht, diese Spinne Arbeit für Wochen mit Scrapy zu machen. Sie haben eine hervorragende Anleitung, aber ich bin neu in Python und Web-Programmierung so verstehe ich nicht, wie zum Beispiel SgmlLinkExtractor hinter den Kulissen funktioniert.

Wäre es einfacher für mich zu versuchen, eine Spinne mit der gleichen einfachen Funktionalität mit Python-Bibliotheken zu schreiben? Ich würde keine Kommentare schätzen und zu helfen.

Danke

War es hilfreich?

Lösung

SgmlLinkExtractor unterstützt keine Wähler in seinem "erlauben" Argumente.

Das ist also falsch:

SgmlLinkExtractor(allow=["hxs.select('//td[@class='altRow'] ...')"])

Das ist richtig:

SgmlLinkExtractor(allow=[r"product\.php"])

Andere Tipps

Die Parsing-Funktion für jedes Spiel Ihres SgmlLinkExtractor genannt wird.

Wie Pablo erwähnt Sie Ihren SgmlLinkExtractor vereinfachen.

Ich habe auch versucht, die Namen aus der ursprünglichen URL in eine Liste gekratzt zu setzen und dann jeden Namen übergibt in Form von absoluter URL als http://www.whitecase.com/aabbas (für / aabbas) zu analysieren.

Der folgende Code Schleifen über die Liste, aber ich weiß nicht, wie das passieren zu analysieren. Glauben Sie, das ist eine bessere Idee?

baseurl = 'http://www.whitecase.com'
names = ['aabbas', '/cabel', '/jacevedo', '/jacuna', '/igbadegesin']

def makeurl(baseurl, names):
  for x in names:
      url = baseurl + x
      baseurl = 'http://www.whitecase.com'
      x = ''
      return url
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top