Geonode logo
Carl Gamutan

Carl Gamutan

Atualizado: 13 de fevereiro de 2023

Publicado: 13 de Fevereiro de 2023

Um Guia para Principiantes para a Raspagem

Scrapy é uma estrutura de código-fonte aberto que pode ser utilizada gratuitamente por qualquer pessoa na Internet. O Scrapy é utilizado principalmente para a rastejagem e raspagem da web. É uma forma rápida e fácil de extrair dados de qualquer página web e a Zyte está actualmente a mantê-los.

Scrapy é uma estrutura de código-fonte aberto que pode ser utilizada gratuitamente por qualquer pessoa na Internet. O Scrapy é utilizado principalmente para a rastejagem e raspagem da web. É uma forma rápida e fácil de extrair dados de qualquer página web e a Zyte está actualmente a mantê-los.

Instalando o Scrapy

Para instalar o Scrapy, é necessária uma versão Python de 3.7 ou superior. Recomenda-se também a sua instalação num virtualenv dedicado, para que possa evitar quaisquer conflitos que possam surgir com os pacotes do seu sistema.

Descarregar Scrapy na sua plataforma preferida.

Para instalar o Scrapy, precisa de instalar Anaconda ou Miniconda, abrir o Python, e executar o comando:

conda install -c conda-forge scrapy

Em alternativa, também pode correr:

pip instalar o Scrapy

Se estiver a utilizar um sistema Ubuntu, então necessita de instalar primeiro todas estas dependências:

sudo apt-get install python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

Se estiver a utilizar um sistema macOS, então precisa de instalar as ferramentas de linha de comando Xcode. É necessário abrir uma janela de terminal e executar:

xcode-select --install

Parabéns! Instalou o Scrapy no seu dispositivo. Agora, podemos experimentar a web a rastejar um website e a extrair os seus dados.

Iniciando um Projecto Scrapy

Para iniciar um novo projecto Scrapy, é necessário introduzir um directório onde gostaria que o seu código fosse armazenado. Precisa de correr:

scrapetest de arranque do projecto de raspagem

A execução deste código irá criar um directório chamado "scrapetest" e no seu interior estaria:

scrapetest/
    scrapy.cfg # distribuir ficheiro de configuração

    módulo Python do projecto scrapetest/ #, importará o seu código a partir daqui
        __init__.py

        items.py          

        middlewares.py   

        pipelines.py      

        settings.py       

        aranhas/ # um directório onde mais tarde irá colocar as suas aranhas
            __init__.py

Depois de ter iniciado um projecto Scrapy, é agora necessário criar uma Aranha. Uma Aranha é necessária porque é a que o Scrapy usa para extrair informação de uma página web. Por exemplo, vamos raspar o website "quotes.toscrape.com".

Em primeiro lugar, é necessário executar o código:

raspagem de importação


classe CitaçõesSpider(scrapy.Spider):
    name = "test" #Nomes de Spider devem ser únicos
 para cada aranha que criar

    def start_requests(self):
        urls = [
            'https://quotes.toscrape.com/page/1/', # Alterar estes URLs para
páginas web que deseja raspar
            'https://quotes.toscrape.com/page/2/',
        ]
        para url em urls:
            yield scrapy.request(url=url, callback=self.parse)

    def parse(self, resposta):
        página = response.url.split("/")[-2]
        filename = f'quotes-{página}.html'
        com o nome aberto(filename, 'wb') como f:
            f.write(response.body)
        self.log(f'Ficheiro guardado {filename}')

Para que a aranha comece a rastejar, é necessário correr:

teste de raspagem

Deverá então obter uma saída que mostre que rastreou o website "quotes.toscrape.com". Se quiser raspar todas as páginas de um website, em vez de apenas páginas específicas, então pode correr:

raspagem de importação


classe CitaçõesSpider(scrapy.Spider):
    nome = "test"
    start_urls = [
        'https://quotes.toscrape.com/page/1/',
    ]

    def parse(self, resposta):
        para citação em response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'autor': quote.css('pequeno.autor::texto').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

        next_page = response.css('li.next a::attr(href)').get()
        se a próxima_página não for Nenhuma:
            next_page = response.urljoin(next_page)
            yield scrapy.request(next_page, callback=self.parse)

Agora, é necessário armazenar os dados que a aranha extraiu. Para armazenar os dados raspados, basta correr:

scrapy crawl test -O test.json

Se quiser anexar qualquer novo conteúdo a um ficheiro já existente, pode executar este código em vez disso:

crawl crawl cotas -o cotas.jsonl

Parabéns! Acabou de extrair e armazenar os dados que raspou com Scrapy. Pode ainda acrescentar algo para garantir que a raspagem da web com Scrapy seria bem sucedida, e isto é, utilizar os proxies Scrapy.

Configuração de Scrapy Proxies

Um proxy Scrapy tratará todos os seus pedidos da web para si, por isso qualquer website que raspe só poderá ver o endereço IP do servidor proxy. O seu endereço IP será completamente escondido. Ao rodar continuamente IPs e utilizar proxies residenciais, os websites serão enganados a pensar que os seus pedidos são de utilizadores genuínos e não apenas de alguém que utiliza um robot de raspagem da web como o Scrapy.

Por exemplo, estaremos a utilizar um proxy Geonode. Pode saltar para "Acquiring Proxy Server Details With Geonode" se ainda não tiver obtido os seus detalhes de Geonode proxy.

Existem dois métodos para configurar um proxy em Scrapy.

O primeiro método é utilizar o middleware do Scrapy, chamado HTTPProxyMiddleware, que configura automaticamente o seu parâmetro proxy como o proxy padrão.

Pode ser executado:

def start_requests(self):
    para url em self.start_urls:
        return Request(url=url, callback=self.parse,
                       headers={"User-Agent": "Meu Agente-utilizador"},
                       meta={"proxy": "premium-residential.geonode.com:9001"})

O segundo método seria criar o seu próprio middleware. Este método é mais isolado e dá-lhe um maior grau de liberdade.

Pode correr:

de w3lib.http import basic_auth_header 

DOWNLOADER_MIDDLEWARES = { 
    'myproject.middlewares.CustomProxyMiddleware': 350, 
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400, 
}

classe CustomProxyMiddleware(objecto):
    def process_request(self, request, spider):
        request.meta["proxy"] = "premium-residential.geonode.com:9001
        request.headers["Proxy-Authorization"] = 
                          basic_auth_header(“geonode_xbYe9H2LYr”, “9806022c-cd4a-4776-a053-73fee44344dd”)

Parabéns! Adicionou um servidor proxy quando raspa qualquer website com Scrapy. Se quiser verificar se o seu proxy está a funcionar, pode visitar https://www.geonode.com/what-is-my-ip/.

Adquirir Detalhes do Servidor Proxy com Geonode

Passo 1. Ir para Geonode e iniciar sessão com a sua conta existente ou inscrever-se para criar uma nova conta.

geonodelogin.png

Passo 2. Na Home Page, clicar em "Serviços Residenciais ".

GeonodeNew1.png

Passo 3. Percorra para baixo até ver "Endpoints ".

geonodenew1.png

Passo 4. Escolha qual "Protocolo de Proxy " pretende utilizar: "Protocolo HTTP " ou "Protocolo SOCKS5".

geonodenew1.png

Passo 5. Seleccione qual "Tipo de sessão" pretende utilizar: "Proxy rotativo " ou "Proxy pegajoso ".

geonodenew3.png

Passo 6. Escolha qual proxy pretende utilizar. Por exemplo, vamos utilizar o proxy destacado "premium-residential.geonode.com:9001".

geonodenew4.png

Se quiser utilizar um endereço IP em vez de um DNS, basta desligar o botão Mostrar DNS, e os endereços IP aparecerão.

geonodenew5.png

Passo 7. Agora precisa da sua conta proxy "Detalhes da Autenticação". Para Geonode, isto está na página inicial da sua conta.

GeonodeNew2.png