Web scraping is a powerful technique for extracting data from websites, but it must be done responsibly. One crucial element of web scraping is understanding and respecting the robots.txt file. This article provides an in-depth look at robots.txt, its role in web scraping, and best practices to follow.
What is robots.txt?
The robots.txt file is a standard used by websites to communicate with web crawlers and bots. It specifies which parts of the site can or cannot be accessed by automated systems. Although primarily designed for search engines, robots.txt also impacts web scraping practices.
Objetivo
The primary goal of robots.txt is to instruct web crawlers (like those from search engines) which pages or sections of a website they are allowed to crawl or index. This can help prevent certain content from appearing in search engine results, manage server load, and control the accessibility of private or sensitive information. With it, site administrators control and manage the activities of web crawlers, preventing overloads and protecting sensitive data.
Localização
The robots.txt file must be placed in the root directory of the website. For instance, it should be accessible via http://www.example.com/robots.txt.
Format
The file consists of simple text and follows a basic structure. It includes directives that specify which user agents (bots) should follow which rules.
Common Directives:
-
User-agent
Defines which web crawler the following rules apply to.
For example: User-agent: *
The asterisk (*) is a wildcard that applies to all bots. -
Disallow
Specifies which paths or pages a crawler should not access.
For example: Disallow: /private/
This tells bots not to crawl any URL that starts with /private/. -
Allow
Overrides a Disallow directive for specific paths.
For example: Allow: /private/public-page.html
This permits crawlers to access public-page.html even if /private/ is disallowed. -
Crawl-delay
Sets a delay between requests to manage the load on the server.
For example: Crawl-delay: 10 -
Sitemap
Indicates the location of the XML sitemap to help crawlers find and index pages more efficiently.
For example: Sitemap: http://www.example.com/sitemap.xml
Example of robots.txt File
User-agent: * Disallow: /private/ Allow: /private/public-page.html Crawl-delay: 12 Sitemap: http://www.example.com/sitemap.xml
Additional Considerations
- Some search engines have a size limit for the
robots.txt
file, usually 500KB. Ensure the file does not exceed this limit. - O
robots.txt
file should use UTF-8 encoding. Using other encodings may prevent correctly parsing. - Some crawlers (like Googlebot) support the use of wildcards in
Disallow
eAllow
directives (e.g.,*
for any characters,$
for the end of a string).Disallow: /private/* Disallow: /temp/$
- O
robots.txt
file is case-sensitive. For example,/Admin/
e/admin/
are different paths. - People can use the
#
symbol to add comments in the file, which are ignored by crawlers but can help administrators understand and maintain the file.# Prevent all crawlers from accessing admin pages User-agent: * Disallow: /admin/
- Before applying the
robots.txt
file to a production environment, use tools (such as the robots.txt Tester in Google Search Console) to test the rules and ensure they work as expected. - For large websites or those with dynamic content, it might be necessary to dynamically generate the
robots.txt
file. Ensure the generated file is always valid and includes all necessary rules. - Not all crawlers obey the
robots.txt
file rules, so additional measures (like server firewalls, IP blacklists, etc.) may be necessary to protect sensitive content for malicious crawlers. - If you want to prevent search engines from indexing specific pages but allow crawlers to access them to fetch other content, use the
noindex
meta tag instead ofDisallow
.<meta name="robots" content="noindex">
- Tentar manter o
robots.txt
seja simples e evite regras demasiado complexas. As regras complexas podem ser difíceis de manter e podem conduzir a potenciais erros de análise.
How robots.txt Affects Web Scraping
-
Guidelines for Crawlers
A principal função do robots.txt é fornecer instruções aos rastreadores da Web sobre as partes do sítio que não devem ser acedidas. Por exemplo, se um ficheiro ou diretório não for permitido no robots.txt, espera-se que os crawlers evitem essas áreas.
-
Respect for robots.txt
- Raspagem ética: Muitos scrapers e crawlers éticos da Web aderem às regras especificadas em robots.txt como cortesia para os proprietários dos sítios e para evitar sobrecarregar o servidor.
- Considerações legais: Embora não seja juridicamente vinculativo, ignorar o robots.txt pode, por vezes, levar a problemas legais, especialmente se a raspagem causar danos ou violar os termos de serviço.
-
Disallowed vs. Allowed Paths
- Caminhos não permitidos: Estes são especificados utilizando a diretiva Disallow. Por exemplo,
Não permitir: /private-data/
significa que todos os crawlers devem evitar o diretório /private-data/. - Caminhos permitidos: Se determinados diretórios ou páginas forem permitidos, podem ser especificados utilizando a diretiva Allow.
- Caminhos não permitidos: Estes são especificados utilizando a diretiva Disallow. Por exemplo,
-
User-Agent Specific Rules
O ficheiro robots.txt pode especificar regras para diferentes crawlers utilizando a diretiva User-agent.
For example:
User-agent: Googlebot
Disallow: /no-google/Isto bloqueia o acesso do Googlebot a /no-google/, mas permite o acesso de outros crawlers.
-
Server Load
Ao seguir as diretrizes do robots.txt, os scrapers reduzem o risco de sobrecarregar um servidor, o que pode acontecer se forem feitos demasiados pedidos demasiado depressa.
-
Not a Security Mechanism
O ficheiro robots.txt não é uma caraterística de segurança. É uma diretriz, não uma restrição. Depende do facto de os crawlers respeitarem as regras estabelecidas. Os scrapers maliciosos ou os programados para ignorar o robots.txt ainda podem aceder a áreas não permitidas.
-
Compliance and Best Practices
- Respeitar robots.txt: Para evitar potenciais conflitos e respeitar os operadores dos sítios Web, os scrapers devem aderir às regras definidas em robots.txt.
- Considerar robots.txt Estado: Verifique sempre o ficheiro robots.txt antes de fazer scraping de um sítio para garantir a conformidade com as políticas do sítio.
Common Misconceptions About robots.txt
-
robots.txt is Legally Binding
O robots.txt não é um contrato legal, mas um protocolo para gerir o acesso de crawlers. Embora seja crucial para a raspagem ética, não impõe legalmente restrições de acesso.
-
robots.txt Prevents All Scraping
O robots.txt é uma diretriz para bots e crawlers, mas não impede todas as formas de raspagem. A raspagem manual ou ferramentas sofisticadas podem continuar a aceder a áreas restritas.
-
robots.txt Secures Sensitive Data
O robots.txt não é um recurso de segurança. Destina-se a gerir o acesso de crawlers e não a proteger informações sensíveis.
How to Scrape Pages from Website with robots.txt
1. Preparing for Scraping
Setting up your environment
Instalar o necessário Python bibliotecas:
importar pedidos from bs4 import BeautifulSoup importar time
Choosing the right tools
- Pedidos: Para efetuar pedidos HTTP.
- Bela sopa: Para análise de HTML e XML.
- Escória: Uma estrutura abrangente de raspagem da Web.
- Selénio: Para interagir com conteúdos carregados dinamicamente.
Assessing the website’s terms of service
Reveja os termos de serviço do sítio Web para garantir que as suas acções estão em conformidade com as respectivas políticas. Alguns sítios Web proíbem explicitamente a recolha de dados.
2. Scraping with Caution
Fetching and parsing robots.txt
Em primeiro lugar, verifique o ficheiro robots.txt para compreender as regras de rastreio do sítio:
resposta = requests.get('https://example.com/robots.txt') robots_txt = response.text def parse_robots_txt(robots_txt): regras = {} agente_do_utilizador = '*' for line in robots_txt.split('\n'): if line.startswith('User-agent'): user_agent = line.split(':')[1].strip() elif line.startswith('Disallow'): path = line.split(':')[1].strip() regras[user_agent] = regras.get(user_agent, []) + [path] return rules regras = parse_robots_txt(robots_txt)
Identifying allowed and disallowed paths
Determine quais os caminhos a que pode aceder de forma legal e ética com base nas diretivas robots.txt:
allowed_paths = [path for path in rules.get('*', []) if not path.startswith('/')]
Handling disallowed paths ethically
Se precisar de dados de caminhos não permitidos, ou se pretender recolher dados de sítios Web protegidos por robots.txt, considere as seguintes opções:
- Contactar o proprietário do sítio Web: Pedir autorização para aceder aos dados.
- Utilizar métodos alternativos: Explorar APIs ou fontes de dados públicas.
3. Alternative Data Access Methods
APIs and their advantages
Muitos sítios Web oferecem APIs que fornecem acesso estruturado aos seus dados. A utilização de APIs é frequentemente mais fiável e respeitadora do que a raspagem.
Public data sources
Procure dados disponíveis publicamente que possam satisfazer as suas necessidades. Os sítios Web do governo, as instituições de investigação e as plataformas de dados abertos são bons locais para começar.
Data sharing agreements
Contactar o proprietário do sítio Web para negociar acordos de partilha de dados. Isto pode permitir o acesso aos dados, respeitando as políticas do sítio.
4. Advanced Techniques
Scraping dynamically loaded content
Utilize o Selenium ou ferramentas semelhantes para recolher conteúdo que é carregado dinamicamente por JavaScript:
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') html = driver.page_source soup = BeautifulSoup(html, 'html.parser')
Using headless browsers
Os navegadores sem cabeça, como o Headless Chrome ou o PhantomJS, podem interagir com páginas Web sem apresentar uma interface de utilizador, o que os torna úteis para a recolha de conteúdos dinâmicos.
Avoiding detection and handling rate limits
Alterne os agentes de utilizador, utilize proxies e implemente atrasos entre pedidos para imitar o comportamento humano e evitar ser bloqueado.
OkeyProxy é um poderoso fornecedor de proxy, que suporta rotação automática de IPs residenciais com alta qualidade. Com os ISPs a oferecerem mais de 150 milhões de IPs em todo o mundo, pode agora registar-se e receber um teste gratuito de 1 GB!
Conclusão
Ao seguir este guia, pode navegar pelas complexidades da recolha de páginas de sítios Web com robots.txt, respeitando as normas éticas e legais. Respeitar o robots.txt não só o ajuda a evitar potenciais problemas legais, como também assegura uma relação de cooperação com os proprietários dos sítios Web. Boa raspagem!