Scrapy возвращает разные результаты между Shell и Spider - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь получить мини-биографию в верхней части следующей страницы:

https://en.m.wikipedia.org/wiki/C%C3%A9sar_Milstein

С помощью скорлупы я могу выполнить следующее:

C:\Users\broke\Documents\DataViz Projects>scrapy shell https://en.m.wikipedia.org/wiki/C%C3%A9sar_Milstein

...
[s]   request    <GET https://en.m.wikipedia.org/wiki/C%C3%A9sar_Milstein>
[s]   response   <200 https://en.m.wikipedia.org/wiki/C%C3%A9sar_Milstein>
...

In [1]:  response.xpath('//div[@id="mf-section-0"]/p[text() or normalize-space(.)=""]').extract()
Out[1]:
['<p class="mw-empty-elt">\n\n</p>',
 '<p><b>César Milstein</b>, <a href="/wiki/Order_of_the_Companions_of_Honour" title="Order of the Companions
of Honour">CH</a>, <a href="/wiki/Royal_Society" title="Royal Society">FRS</a><sup id="cite_ref-frs_2-1" clas
s="reference"><a href="#cite_note-frs-2">[2]</a></sup> (8 October 1927 – 24 March 2002) was an <a href="/wiki
/Argentinian" class="mw-redirect" title="Argentinian">Argentinian</a> biochemist in the field of <a href="/wi
ki/Antibody" title="Antibody">antibody</a> research.<sup id="cite_ref-4" class="reference"><a href="#cite_not
e-4">[4]</a></sup>
...
</a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12">[12]</a></sup><s
up id="cite_ref-13" class="reference"><a href="#cite_note-13">[13]</a></sup><sup id="cite_ref-14" class="refe
rence"><a href="#cite_note-14">[14]</a></sup><sup id="cite_ref-15" class="reference"><a href="#cite_note-15">
[15]</a></sup></p>']

Однако следующий код парсера в моем пауке возвращает пустой список при передаче этого URL:

    def get_mini_bio(self,response):
        """ Get the winner's bio text and photo"""
        item = response.meta['item']
        item['image_urls']=[]
        img_src = response.xpath('//table[contains(@class,"infobox")]//img/@src')
        if img_src:
            item['image_urls'] = ['https:{}'.format(img_src[0].extract())]
        mini_bio = ''
        #paras = '\n\n'.join(response.xpath('//div[@id="mw-content-text"]//p[text() or normalize-space(.)=""]').extract())
        mini_bio = response.xpath('//div[@id="mf-section-0"]/p[text() or normalize-space(.)=""]').extract()
        self.logger.warning("mini_bio received {} as a result.".format(mini_bio))
        yield

Выход:

2019-05-28 01:52:59 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://en.wikipedia.org/wiki/C%C3%A9sar_M
ilstein> (referer: None) ['cached']
2019-05-28 01:52:59 [nwinners_minibio] WARNING: mini_bio received [] as a result.

Обратите внимание на закомментированную строку в синтаксическом анализаторе, что xpath вернет набор абзацев, которые включают в себя нужный абзац (абзац внутри div 'mf-section-0'), поэтому абзац, похоже, визуализируется. Тем не менее, он также будет включать в себя все остальные абзацы в текстовом разделе без достаточного количества информации, чтобы различать другие похожие страницы.

Может кто-нибудь сказать мне, почему я получаю разные результаты между оболочкой и пауком, и как я могу получить те же результаты в пауке, что и в оболочке?

...