Estou tentando fazer um web scraping em um site de estatísticas online de jogos de futebol.
Entro na pagina principal e pego os links dos jogos ao vivo e em seguida entra em cada link e pega as informações que eu quero.
Mas se eu rodar de novo 2mins depois, o site bloqueia o acesso.
Alguém pode me ajudar a resolver isso ? Ou não tem solução ?
Pessoal, tudo bem? Estou tentando fazer um web scraping com CURL, mas o resultado é diferente do que eu vejo no browser (Chrome).
O site retorna preços de alugueis de carro. Quando eu abro via browser, ele já mostra automaticamente os valores em reais. Por algum motivo, quando eu faço o request via CURL ele mostra os valores em dólares. Eu consegui fazer com que ele retorne valores em reais utilizando um proxy brasileiro, mas queria achar uma forma direta, sem usar proxy, pq toda hora tenho que ficar atualizando os ips desses proxys.
<?php
date_default_timezone_set('America/Sao_Paulo');
$link = "";
function curl($url, $proxy) {
$options = Array(
CURLOPT_RETURNTRANSFER => TRUE, // Setting cURL's option to return the webpage data
CURLOPT_FOLLOWLOCATION => TRUE, // Setting cURL to follow 'location' HTTP headers
CURLOPT_AUTOREFERER => TRUE, // Automatically set the referer where following 'location' HTTP headers
CURLOPT_CONNECTTIMEOUT => 300, // Setting the amount of time (in seconds) before the request times out
CURLOPT_TIMEOUT => 300, // Setting the maximum amount of time for cURL to execute queries
CURLOPT_MAXREDIRS => 10, // Setting the maximum number of redirections to follow
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", // Setting the useragent
CURLOPT_URL => $url, // Setting cURL's URL option with the $url variable passed into the function
CURLOPT_HTTPPROXYTUNNEL => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
);
$ch = curl_init(); // Initialising cURL
curl_setopt_array($ch, $options);
$data = curl_exec($ch);
if ($data === false) $data = curl_error($ch);
return stripslashes($data);
curl_close($ch);
}
$scraped_page = curl($link);
echo $scraped_page;
?>
Minha última tentativa foi adicionar esses parametros abaixo no final do link, mas sem sucesso.
Não tenho experiência em Python mas decidi tentar fazer qualquer coisa com o Scrapy, para testes. Assim, estou a tentar recolher os artigos existentes numa determinada página, nomeadamente num elemento DIV com um ID devBody.
Nesse sentido, o meu objectivo é obter o título do artigo e o respectivo URL. Assim, estabeleci uma regra para percorrer apenas o conteúdo desse elemento.
Acontece que, por alguma razão, a recolha de links não se está a limitar apenas a esse elemento, o que faz com que estejam a ser recolhidos links não relevantes e que depois "baralham" os pares título-URL quando os tento construir.
Segue o código:
from scrapy import Spider
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule
from stack.items import StackItem
class StackSpider(Spider):
name = "stack"
allowed_domains = ["dev.mysql.com"]
start_urls = ["http://dev.mysql.com/tech-resources/articles/"]
rules = (Rule(LinkExtractor(restrict_xpaths='//div[@id="devBody"]',), callback='parse'),)
def parse(self, response):
entries = response.xpath('//h4')
items = []
//usar um contador aqui não será, de certeza, a melhor solução mas foi a única que encontrei
//para não receber todos os dados recolhidos num único objecto
i = 0
for entry in entries:
item = StackItem()
item['title'] = entry.xpath('//a/text()').extract()[i]
item['url'] = entry.xpath('//a/@href').extract()[i]
yield item
items.append(item)
i += 1
Para tentar perceber o que se está a passar, recorri às Developer Tools do Chrome e, através de consultas XPath, tudo parece estar correcto.
No entanto, quando tento replicar a mesma lógica no código, algo corre mal. Segundo os logs, é dito que foram de facto recolhidos 57 links, mas há bastantes que estão fora do âmbito (a tal div com ID devBody).
Não faço ideia o que possa estar a causar este comportamento. Estou a usar a versão 1.0.5 do Scrapy e Python 2.7.
Agradeço desde já qualquer ajuda.
Boa tarde a todos(as).
Estou tentando fazer um web scraping em um site de estatísticas online de jogos de futebol.
Entro na pagina principal e pego os links dos jogos ao vivo e em seguida entra em cada link e pega as informações que eu quero.
Mas se eu rodar de novo 2mins depois, o site bloqueia o acesso.
Alguém pode me ajudar a resolver isso ? Ou não tem solução ?
Compartilhar este post
Link para o post
Compartilhar em outros sites