首页 > 解决方案 > Webscraping,在scrapy试图到达某个URL

问题描述

好吧,我正在尝试抓取一个网站,但我无法访问我想要的 URL(操作),我已经尝试使用 Scrapy 和 Selenium 抓取 URL,但都失败了。如果有人可以给小费,或者有任何线索我可以到达这个 URL,我会很高兴。

Bellow 是我用来尝试使用 Scrapy 抓取 URL(操作)的代码:

import scrapy
from scrapy.crawler import CrawlerProcess


class TestBMF(scrapy.Spider):
    name = 'test'
    base_url = 'https://www.rad.cvm.gov.br/ENETCONSULTA/frmGerenciaPaginaFRE.aspx?NumeroSequencialDocumento=98307&CodigoTipoInstituicao=2'

    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3",
        "Upgrade-Insecure-Requests": "1"
    }

    def start_requests(self):
        yield scrapy.Request(
            url=self.base_url,
            headers=self.headers,
            callback=self.parse_detail
        )

    def parse_detail(self, response):
        http_code = response.xpath('//iframe[contains(@id, "iFrameFormulariosFilho")]').getall()
        print(http_code)


process = CrawlerProcess()
process.crawl(TestBMF)
process.start()

跟随回报:

2021-02-04 13:45:58 [scrapy.core.engine] INFO: Spider opened
2021-02-04 13:45:58 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2021-02-04 13:45:58 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2021-02-04 13:46:00 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.rad.cvm.gov.br/ENETCONSULTA/frmGerenciaPaginaFRE.aspx?NumeroSequencialDocumento=98307&CodigoTipoInstituicao=2> (referer: None)
['<iframe id="iFrameFormulariosFilho" style="height: 95%; width: 100%; overflow: scroll;" frameborder="0" title="Empresas - Formulário de Referência" height="80%"></iframe>']
2021-02-04 13:46:00 [scrapy.core.engine] INFO: Closing spider (finished)
2021-02-04 13:46:00 [scrapy.statscollectors] INFO: Dumping Scrapy stats

已经可以看到 Scrapy 返回 iframe,但返回空标签。

但是,如果我在 Google Chrome 或 FireFox 上检查 URL,我会发现:

检查

我正在尝试访问 //iframe//form/@action 中的那个 URL ACTION

我意识到并已经尝试了一些事情:

好吧,我认为是,对任何英语错误感到抱歉,这不是我的母语。

并感谢大家的帮助;)

标签: pythonweb-scrapingscrapy

解决方案


你需要使用这样的东西:https ://pypi.org/project/scrapy-headless-selenium/

如果网站以任何重要的方式使用 Javascript,您将无法看到内容,除非该网站运行,否则您使用实际浏览器是正确的。

该库为您的用例提供了一个工具:

def parse_result(self, response):
    response = response.click('#id')  # equivalent to 
    response.click('//[@id="id"]')
    print(response.selector.xpath('//title/@text'))  # searches the reloaded response body

您可以使用它来单击该按钮以执行您需要执行的相关 POST。


推荐阅读