当前位置: 首页 > 知识库问答 >
问题:

用python和scrapy从web中提取文本

唐宇定
2023-03-14

我正在尝试使用Scrapy在python上用一个简单的蜘蛛代码提取web新闻的每个标题的文本。我将html代码的一部分留在下面

null

<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>

null

因此,我想摘录H4中的文本。为此,我使用Scrapy在python中编写了以下代码:

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个答案

潘璞瑜
2023-03-14

网站使用动态渲染。你需要硒或类似的工具来刮这个。或者,您可以直接从以下站点下载包含所需内容的JSON:

https://www.bcb.gov.br/api/servico/sitebcb/noticias?listsite=conteudo/home-ptbr&listname=Notícias
 类似资料:
  • 我有以下简单的嵌套结构: 我现在想从所有节点中提取所有文本,但与嵌套节点(等等)斗争。 预期产出应为: 尝试类似于: 给出 我没有使用直接的XPATH,而是尝试使用Scrapy中的几个步骤,例如: 使用 不起作用,因为它给出了所有节点。在这里使用div.extract()并查看返回的字符串,我当然可以找到使用字符串搜索的方法,但这是一个很大的漏洞,看起来不像是一个合适的解决方案。 对于如何直接使用

  • 大家好,我想使用scrapy中的xpath从html块中提取所有文本 假设我们有这样一个块: 我想将文本摘录为[“blahblah”,“blahblah”,“blihblih”]。我希望xpath在div节点中递归查找文本。我听说过try:,但它不提取嵌套元素。 干杯!SEB

  • 问题内容: 我想使用Python从HTML文件中提取文本。如果要从浏览器复制文本并将其粘贴到记事本中,我希望得到的输出基本上相同。 我想要比使用正则表达式更强大的功能,而正则表达式可能在格式不正确的HTML上失败。我见过很多人推荐美丽汤,但是使用它时遇到了一些问题。例如,它拾取了不需要的文本,例如JavaScript源。此外,它没有解释HTML实体。例如,我希望&#39; 在HTML源代码中转换为

  • 问题内容: 我有这个示例xml文件 我喜欢提取标题标签和内容标签的内容。 使用模式匹配或使用xml模块,哪种方法最适合提取数据。还是有更好的方法来提取数据。 问题答案: 特别是已经有一个内置的XML库。例如:

  • 问题内容: 这是示例xml文档: 我想提取文本而不指定元素,我该怎么做,因为我有10个这样的文档。我想要这样做是因为我的问题是用户正在输入一个我不知道的单词,必须在其各自文本部分的所有10个xml文档中进行搜索。为此,我应该在不知道元素的情况下知道文本的位置。所有这些文档都不同的另一件事。 请帮忙!! 问题答案: 您可以简单地去除所有标签: 但是,如果您只想在Linux中搜索文件中的某些文本,则可

  • 我正在尝试使用Python中的BeautifulSoup包提取存在于div标记中的文本。 示例我想提取标记 内部的文本 以及 中的文本 当我运行代码时,系统崩溃并显示以下错误: ----------------------------------------------------------------------------------------------------在60###artic