Guia rápido: como criar um rastreador baseado em Python

O uso de web scraping está aumentando ativamente, especialmente em grandes empresas de e-commerce. Web scraping é uma forma de coletar dados para competir, analisar concorrentes e pesquisar novos produtos. Web scraping é um método de extrair informações de um site. Neste artigo, aprenda como criar um raspador baseado em Python. Explore o código para ver como funciona.

Guia rápido: como criar um rastreador baseado em Python

No mundo de big data de hoje, é difícil acompanhar o que está acontecendo. Para empresas que precisam de muitas informações para ter sucesso, a situação se torna mais complicada. Mas, primeiro, eles precisam coletar esses dados de alguma forma, o que significa que precisam lidar com milhares de recursos.

Existem dois métodos de coleta de dados. Você pode usar o serviço do site de mídia API, que é a melhor forma de obter todas as notícias. Além disso, a API é muito fácil de usar. Infelizmente, nem todo site oferece esse serviço. Depois, há o segundo método - rastreamento da web.

O que é rastreamento da web?

Este é um método de extrair informações de um site. Uma página HTML nada mais é que uma coleção de tags aninhadas. As tags formam uma espécie de árvore cuja raiz está nas <html>tags e dividem a página em diferentes partes lógicas. Cada rótulo pode ter seus próprios descendentes (filhos) e pais.

Por exemplo, a árvore da página HTML pode ser assim:

Guia rápido: como criar um rastreador baseado em Python

Para processar este HTML, você pode usar texto ou árvore. Ignorar essa árvore é rastrear a web. Encontraremos apenas os nós de que precisamos em toda essa diversidade e obteremos informações deles! Este método se concentra na conversão de dados HTML não estruturados em informações estruturadas fáceis de usar em um banco de dados ou planilha. A extração de dados requer um robô para coletar informações e se conectar à Internet via HTTP ou um navegador da web. Neste guia, usaremos Python para criar um raspador.

O que precisamos fazer:

  • Pegue o URL da página da qual queremos extrair os dados

  • Copie ou baixe o conteúdo HTML desta página

  • Processe este conteúdo HTML e obtenha os dados necessários

Essa sequência nos permite exibir a URL necessária, obter os dados HTML e, em seguida, processá-los para receber os dados necessários. Mas às vezes precisamos primeiro entrar no site e depois ir para um URL específico para receber dados. Então, devemos adicionar mais um step-login ao site.

Coincidindo

Usaremos a Beautiful Soupbiblioteca para analisar o conteúdo HTML e obter todos os dados necessários. Este é um excelente pacote Python para rastrear documentos HTML e XML.

A biblioteca Selenium nos ajudará a colocar o rastreador no site e acessar o endereço URL necessário em uma sessão. Selenium Python pode ajudá-lo a realizar operações como clicar em botões e inserir conteúdo.

Vamos mergulhar no código

Primeiro, vamos importar a biblioteca que usaremos.

# 导入库
from selenium import webdriver
from bs4 import BeautifulSoup

Então, precisamos mostrar o driver do navegador como o Selenium inicia o navegador da web (usaremos o Google Chrome aqui). Se não quisermos que o robô exiba a interface gráfica do navegador da web, a opção "headless" será adicionada ao Selenium.

Um navegador da web sem interface gráfica (headless) pode gerenciar automaticamente as páginas da web em um ambiente muito semelhante a todos os navegadores da web populares. Mas, neste caso, todas as atividades são realizadas por meio da interface de linha de comando ou usando comunicação de rede.

# chrome驱动程序的路径
chromedriver = '/usr/local/bin/chromedriver'
options = webdriver.ChromeOptions()
options.add_argument('headless') #open a headless browser 
browser = webdriver.Chrome(executable_path=chromedriver, 
chrome_options=options)

Depois de configurar o navegador, instalar a biblioteca e criar o ambiente, começamos a usar HTML. Vamos para a página de entrada e encontrar o identificador, categoria ou nome do campo onde o usuário deve inserir o endereço de email e senha.

# 进入登录页面
browser.get('http://playsports365.com/default.aspx')

# 按姓名搜索标签
email =
browser.find_element_by_name('ctl00$MainContent$ctlLogin$_UserName')
password = 
browser.find_element_by_name('ctl00$MainContent$ctlLogin$_Password')
login = 
browser.find_element_by_name('ctl00$MainContent$ctlLogin$BtnSubmit')

Em seguida, enviaremos os dados de login para essas tags HTML. Para fazer isso, precisamos pressionar o botão de ação para enviar os dados para o servidor.

# 添加登录凭证
email.send_keys('********')
password.send_keys('*******')
# 点击提交按钮
login.click()
email.send_keys('********')
password.send_keys('*******')
login.click()

Após entrar com sucesso no sistema, iremos para a página desejada e coletaremos o conteúdo HTML.

# 成功登录后,转到“ OpenBets”页面
browser.get('http://playsports365.com/wager/OpenBets.aspx')
# 获取HTML内容
requiredHtml = browser.page_source

Agora, quando temos conteúdo HTML, a única coisa que resta é processar os dados. Faremos isso com a ajuda da Beautiful Soup e da biblioteca html5lib.

html5libÉ um pacote de software Python que implementa o algoritmo de rastreamento HTML5 influenciado por navegadores modernos. Uma vez obtida a estrutura padronizada do conteúdo, os dados podem ser pesquisados ​​em qualquer elemento filho da marcação HTML. As informações que procuramos estão na guia do formulário, portanto, estamos procurando por elas.

soup = BeautifulSoup(requiredHtml, 'html5lib')
table = soup.findChildren('table')
my_table = table[0]

Encontraremos a tag pai uma vez, então percorreremos recursivamente as tags filhas e imprimiremos o valor.

# 接收标签和打印值
rows = my_table.findChildren(['th', 'tr'])
for row in rows:
 cells = row.findChildren('td')
 for cell in cells:
 value = cell.text
 print (value)

Para executar este programa, você precisará instalar Selenium, Beautiful Soup e html5lib usando pip. Depois de instalar a biblioteca, o comando é o seguinte:

# python <程序名称>

Esses valores serão impressos no console e é assim que você rastreia qualquer site.

Se rastrearmos um site com conteúdo atualizado com frequência (por exemplo, uma folha de pontuação de esportes), devemos criar uma tarefa cron para iniciar o programa em intervalos de tempo específicos.

Muito bom, está tudo normal, o conteúdo é rastreado e os dados são preenchidos. Fora isso, tudo está bem. Esse é o número de solicitações que queremos obter dados.

Guia rápido: como criar um rastreador baseado em Python

Às vezes, o servidor se cansa de fazer um monte de solicitações da mesma pessoa e o servidor proíbe. Infelizmente, as pessoas têm paciência limitada.

Nesse caso, você deve se esconder. Os motivos mais comuns para banimentos são erros 403 e solicitações frequentes ao servidor quando o IP é bloqueado. Quando o servidor está disponível e capaz de processar a solicitação, o servidor emite um erro 403, mas por alguns motivos pessoais, se recusa a fazê-lo. O primeiro problema foi resolvido - podemos fingir ser humanos usando html5lib para gerar um agente de usuário falso e passar uma combinação aleatória de sistema operacional, especificação e navegador para nossa solicitação. Na maioria dos casos, essa é uma maneira boa e precisa de coletar as informações de seu interesse.

Mas às vezes apenas colocá-lo time.sleep()no lugar certo e preencher o cabeçalho da solicitação não é suficiente. Portanto, você precisa encontrar uma maneira poderosa de alterar esse IP. Para capturar grandes quantidades de dados, você pode:

- Desenvolva sua própria infraestrutura de endereços IP;

- Use Tor - este tópico pode ser dedicado a vários artigos grandes, mas na verdade já foi concluído;

- Utilizar uma rede de agentes comerciais;

Para iniciantes em web scraping, a melhor opção é entrar em contato com um provedor de proxy, como Infatica, etc. Eles podem ajudá-lo a configurar um proxy e resolver todas as dificuldades no gerenciamento de servidor proxy. Coletar grandes quantidades de dados requer muitos recursos, portanto, não há necessidade de "reinventar a roda" desenvolvendo sua própria infraestrutura interna para agir como um proxy. Mesmo muitas das maiores empresas de comércio eletrônico usam serviços de rede de agências para terceirizar o gerenciamento de agências, porque a prioridade da maioria das empresas são os dados, não o gerenciamento de agências.

Acho que você gosta

Origin blog.51cto.com/mageedu/2541099
Recomendado
Clasificación