возникли проблемы со следующим простым кодом скребущего сайта Форума Справки:SCRAPY сломана
class ForumSpider(CrawlSpider):
...
rules = (
Rule(SgmlLinkExtractor(restrict_xpaths="//div[@class='threadlink condensed']"),
callback='parse_threads'),
)
def parse_threads(self, response):
thread = HtmlXPathSelector(response)
# get the list of posts
posts = thread.select("//div[@id='posts']//table[contains(@id,'post')]/*")
# plist = []
for p in posts:
table = ThreadItem()
table['thread_id'] = (p.select("//input[@name='searchthreadid']/@value").extract())[0].strip()
string_id = p.select("../@id").extract() # returns a list
p_id = string_id[0].split("post")
table['post_id'] = p_id[1]
# plist.append(table)
# return plist
yield table
Некоторых XPATH hackiness в стороне, когда я запускаю это с выходом Я получаю очень странные результаты с несколькими хитами те же thread_id и post_id. Что-то вроде:
114763,1314728
114763,1314728
114763,1314728
114763,1314740
114763,1314740
114763,1314740
Когда я переключаюсь обратно в ту же логику с возврата (в комментариях) все работает отлично. Я думаю, что это может быть некоторая основная ошибка с генератором, но я не могу понять это. Почему одни и те же должности попадают несколько раз? Почему код работает с использованием return, но не Доход?
Полный фрагмент кода в сущности here.
О, мои извинения! Отступ правилен в текущем коде. Это была просто ошибка копирования и вставки. – denten
Ну, тогда это должно сработать ... не видно никаких ошибок. Не могли бы вы показать весь код вашего паука, чтобы я мог воспроизвести его? – alecxe
https://gist.github.com/denten/d898a48bcf2a496c7c07 – denten