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.

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

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

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

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

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

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.

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

