Это код Spyder1, что я пытался писать в Scrapy рамках:Scrapy ошибка индекса паук
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()
Регулярное выражение в rules
успешно тянет все био URLs, что я хочу с самого начала URL :
>>> 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']
>>>
Но когда я запускаю код я получаю
[wc2] ERROR: Error processing FirmItem(school=[]) -
[Failure instance: Traceback: <type 'exceptions.IndexError'>: list index out of range
Это FirmIt em в Items.py
from scrapy.item import Item, Field
class FirmItem(Item):
school = Field()
pass
Не могли бы вы помочь мне понять, где происходит ошибка индекса?
Мне кажется, что это как-то связано с SgmLinkExtractor.
Я пытался заставить этот паук работать неделями с помощью Scrapy. У них отличный учебник, но я новичок в python и веб-программировании, поэтому я не понимаю, как, например, SgmlLinkExtractor
работает за сценой.
Было бы проще, если бы я попытался написать паука с такой же простой функциональностью с библиотеками Python? Буду признателен за любые комментарии и помощь.
Благодаря
Я не думаю, что это вообще в LinkExtractor; мне кажется, что это что-то, участвующее в методе анализа, который ищет школу, от которой зависит степень. – inklesspen
Хорошо. Тогда я думаю, мне нужно добавить цикл for для синтаксического анализа, чтобы он искал JD в каждом URL-адресе, возвращаемом LinkExtractor? Но я не понимаю отношения между LinkExtractor и parse. Учебник здесь http://doc.scrapy.org/intro/tutorial.html#extracting-the-data имеет цикл for в синтаксическом анализе, но он использует вложенные hxs. Непонятно, как я могу реализовать это в моем случае, когда у меня есть только 1 регулярное выражение. – Zeynel
Всегда используйте строковый литерал для строк, которые могут содержать регулярные выражения, например, вместо '\ w +' использовать r '\ w +'. – jfs