Извлечение текста из Интернета с помощью python и scrapy - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь извлечь текст каждого заголовка веб-новостей с помощью простого кода паука на python с использованием scrapy. Я оставляю часть кода html ниже

<div _ngcontent-c17="" class="col-md-8"><h2 _ngcontent-c17="" class="cormorant">Notícias</h2>
<ul _ngcontent-c17="" class="list-unstyled lista-noticias"><!----><!---->
<li _ngcontent-c17="" class="noticia hvr-shadow py-3 d-block"><!---->
<div _ngcontent-c17="" class="container-noticia"><div _ngcontent-c17="" class="data pr-3"><span _ngcontent-c17="" class="dia cormorant">02</span><span _ngcontent-c17="" class="mes">Abril</span><span _ngcontent-c17="" class="hora cormorant">14:25</span></div><div _ngcontent-c17="" class="texto pl-3"><div _ngcontent-c17="" class="assunto"></div><!----><a _ngcontent-c17="" bcblink="" class="d-block" href="/detalhenoticia/434/noticia">
<h4 _ngcontent-c17="" class="cormorant">CMN autoriza o BC a conceder empréstimos mediante emissão de Letra Financeira Garantida e a firmar acordo de swap com o Federal Reserve</h4>

Таким образом, я хотел бы извлечь текст в h4. Для этого у меня есть следующий код в python с использованием scrapy:

from scrapy.item import Field
from scrapy.item import Item
from scrapy.spiders import Spider
from scrapy.selector import Selector
from scrapy.loader import ItemLoader


class Pregunta(Item): 
    titulo = Field()
    id = Field() 

class BcbSpider(Spider): 
    name = "bcb_noticias" 
    start_urls = ['https://www.bcb.gov.br/noticias']

    def parse(self,response): 
            sel = Selector(response) 
            preguntas = sel.xpath('//ul[@class="list-unstyled lista-noticias"]/li') 

            for i, elem in enumerate(preguntas):
                item = ItemLoader(Pregunta(),elem)
                item.add_xpath('titulo','.//h4[@class="cormorant"]/text()')
                item.add_value('id',i)
                yield item.load_item()

Нет ошибки при запуске моего кода в Powershell. Однако ничего не ломается

Я оставляю часть сообщения ниже

2020-04-06 11:21:25 [scrapy.core.engine] INFO: Spider opened
2020-04-06 11:21:25 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-04-06 11:21:25 [scrapy.extensions.telnet] INFO: Telnet console listening on (IP number)
2020-04-06 11:21:26 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.bcb.gov.br/noticias> (referer: None)

Код работает на других веб-страницах. Я не знаю, правильно ли я пишу xpath (я пытался написать его в нескольких формах), или есть другая проблема

1 Ответ

1 голос
/ 07 апреля 2020

Сайт использует динамический c рендеринг. Вам нужен Selenium или подобные инструменты, чтобы очистить это. Кроме того, вы можете скачать JSON, содержащий то, что вы ищете, прямо из:

https://www.bcb.gov.br/api/servico/sitebcb/noticias?listsite=conteudo/home-ptbr&listname=Notícias

и проанализировать его с помощью нужного вам инструмента. BCB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...