Num mundo que está a tornar-se cada vez mais dependente de dados, a capacidade de reunir e analisar grandes quantidades de informação pode dar às empresas e aos profissionais uma vantagem competitiva significativa. O Web scraping, o processo de extração de dados de sítios Web, é uma ferramenta poderosa no arsenal de analistas de dados, programadores Web, profissionais de marketing digital e programadores Python. Este guia apresenta técnicas básicas e avançadas de raspagem da Web, destaca as práticas recomendadas e apresenta a API de raspagem da Web do ProxyScrape como uma solução flexível para sites estáticos e dinâmicos.
Para determinar se um sítio Web é estático ou dinâmico:
Estes métodos representam apenas algumas formas de determinar se um sítio Web é estático ou dinâmico. Embora existam estratégias adicionais, analisámos e identificámos estas técnicas, que consideramos serem amplamente utilizadas e eficazes.
Para extrair conteúdo estático, Python oferece bibliotecas robustas como `requests` para fazer requisições HTTP e `BeautifulSoup` para analisar documentos HTML e XML. Aqui está um exemplo simples:
importar pedidos
from bs4 import BeautifulSoup
resposta = requests.get('http://example.com')
soup = BeautifulSoup(response.text, 'html.parser')
# Extrair os dados desejados
dados = soup.find_all('p')
Este método é perfeito para quem está a iniciar a sua viagem na recolha de dados da Web. É eficaz para sítios Web com conteúdo estático, exigindo uma configuração mínima.
Os sítios Web dinâmicos apresentam um desafio diferente. Estes sítios web carregam o seu conteúdo de forma assíncrona com JavaScript, o que significa que a raspagem simples de HTML não funciona porque os dados não estão presentes no carregamento inicial da página.
Há duas formas de abordar a raspagem dinâmica de sítios Web:
Para recolher conteúdo dinâmico, ferramentas como o Playwright imitam a interação de um utilizador real com o browser, permitindo-lhe recolher dados carregados dinamicamente. Aqui está uma breve visão sobre como usar o Playwright com Python:
from playwright.sync_api import sync_playwright
se __name__ == '__main__':
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
página = browser.new_page()
página.goto('https://www.scrapethissite.com/pages/ajax-javascript/')
# Simular interacções aqui
page.click('//*[@id="2014"]')
# Extrair o conteúdo dinâmico
content = page.inner_text('//*[@id="oscars"]/div/div[5]/div/table')
print(content)
browser.close()
import requests
# URL from the AJAX request
url = 'https://example.com/api/data'
# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
'Authorization': 'Bearer token_if_needed'
}
# If it's a POST request, you might also need to send data
data = {
'example_key': 'example_value'
}
# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)
# To view the response
print(response.json())
Embora o domínio dos pedidos e do Playwright ou de qualquer outra biblioteca de cliente Http possa ser gratificante, é necessário tempo e esforço para os tratar corretamente. Uma abordagem alternativa é utilizar uma API de raspagem da Web que abstrai a complexidade das tarefas de raspagem. Não só trata do envio de pedidos HTTP por si, como também fornece assistência com técnicas anti-ban para evitar ser bloqueado por determinados sítios Web.
ProxyScrape oferece uma API de Web Scraping que simplifica a extração de dados de sítios Web estáticos e dinâmicos.
As características da API incluem:
Esta é uma ilustração de como pode incorporar a nossa API de recolha de dados da Web nos seus scripts Python para sítios Web estáticos ou para chamar um ponto de extremidade da API que tenha extraído do painel de inspeção no seu navegador:
import requests
import base64
import json
data = {
"url": "https://books.toscrape.com/",
"httpResponseBody": True
}
headers = {
'Content-Type': 'application/json',
'X-Api-Key': 'YOUR_API_KEY'
}
response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)
if response.status_code == 200:
json_response = response.json()
if 'browserHtml' in json_response['data']:
print(json_response['data']['browserHtml'])
else:
print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
print("Error:", response.status_code)
Aqui está um exemplo em que esperamos que o favicon comece a carregar. Normalmente, esse é o último pedido a ser iniciado no site de teste que estamos a utilizar.
import requests
import json
url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'
headers = {
'Content-Type': 'application/json',
'X-Api-Key': '<your api key>' # Make sure to replace <your api key> with your actual API key
}
payload = {
"url": "https://books.toscrape.com/",
"browserHtml": True,
"actions": [
{
"action": "waitForRequest",
"urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
"urlMatchingOptions": "exact"
}
]
}
response = requests.post(url, headers=headers, json=payload)
# Print the response from the server
print(response.text) # Prints the response body as text
Independentemente das ferramentas ou APIs que escolher, respeitar os termos de utilização dos sítios Web, limitar as taxas de pedidos para evitar proibições de IP e utilizar proxies para a recolha anónima de dados são práticas recomendadas fundamentais. ProxyScrape O serviço de proxies da Web da Web, o qual não só fornece proxies premium, residenciais, móveis e dedicados para essas necessidades, como também incentiva a raspagem ética da Web.
Pronto para começar a sua aventura de raspagem da Web? Registe-se em ProxyScrape hoje mesmo e explore as infinitas possibilidades da Web com os nossos proxies dedicados, proxies residenciais e uma API de Web Scraping abrangente.