[Notas do rawler] O rastreador Python simplesmente usa IP de proxy de rastreamento

I. Introdução

Nos últimos anos, tem havido cada vez mais rastreadores na Internet e muitos sites restringiram os rastreadores e bloquearam algumas solicitações irregulares. Para realizar tarefas normais de rastreador da web, os rastreadores geralmente usam IPs proxy para ocultar seus IPs reais e evitar serem banidos pelo servidor. Este artigo apresentará como usar um rastreador Python para obter o IP do proxy e como usar o IP do proxy no rastreador.

2. Obtenha IP proxy

Existem duas maneiras de obter IP de proxy: site de IP de proxy gratuito e serviço de IP de proxy pago. Sites de IP de proxy gratuitos geralmente fornecem alguns IPs de proxy gratuitos, mas a qualidade desses IPs de proxy é muito instável e pode ser facilmente banida ou inválida; serviços de IP de proxy pagos fornecem IPs de proxy estáveis ​​e confiáveis, mas exigem pagamento. Como este artigo apresenta principalmente como usar o rastreador Python, usaremos o site de IP do proxy gratuito para obter o IP do proxy.

Especificamente, podemos usar um rastreador para rastrear a lista de IP de proxy em alguns sites de IP de proxy gratuitos. Aqui tomamos como exemplo o IP proxy gratuito do site. As etapas específicas são as seguintes:

  1. Abra o site do proxy Zdaye (https://www.zdaye.com/), selecione o tipo e localização do IP do proxy e clique no botão de pesquisa.
  2. Abra as ferramentas do desenvolvedor (F12), entre na aba Rede, clique no botão Limpar e, a seguir, clique no botão "Obter mais conteúdo" para observar se alguma nova solicitação é enviada.
  3. Uma solicitação chamada "nn" foi encontrada e o URL solicitado foi https://www.zdaye.com/nn/1, onde "nn" representa o IP do proxy de alta densidade e o número "1" representa o número da página . Podemos obter o IP do proxy de diferentes páginas modificando o número da página.
  4. Adicione o campo "User-Agent" no cabeçalho da solicitação para simular uma solicitação do navegador e evitar ser rejeitada pelo servidor.
  5. Pegue o código HTML na resposta e extraia o IP do proxy e seu número de porta usando expressões regulares ou a biblioteca BeautifulSoup.

A seguir está a implementação específica do código Python:

import requests
from bs4 import BeautifulSoup
import re

# 抓取代理IP列表
def fetch_proxy_ips():
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
    url_template = 'http://www.zdaye.com/nn/{}'
    proxy_ips = []
    for page in range(1, 11):
        url = url_template.format(page)
        resp = requests.get(url, headers=headers)
        soup = BeautifulSoup(resp.text, 'html.parser')
        trs = soup.find_all('tr')
        for tr in trs[1:]:
            tds = tr.find_all('td')
            proxy_ip = tds[1].text + ':' + tds[2].text
            proxy_ips.append(proxy_ip)
    return proxy_ips

# 测试代理IP是否可用
def test_proxy_ip(proxy_ip):
    url = 'http://httpbin.org/ip'
    proxies = {
        'http': 'http://' + proxy_ip,
        'https': 'https://' + proxy_ip
    }
    try:
        resp = requests.get(url, proxies=proxies, timeout=5)
        resp.raise_for_status()
        return True
    except:
        return False

# 获取可用的代理IP
def get_valid_proxy_ips():
    proxy_ips = fetch_proxy_ips()
    valid_proxy_ips = []
    for proxy_ip in proxy_ips:
        if test_proxy_ip(proxy_ip):
            valid_proxy_ips.append(proxy_ip)
    return valid_proxy_ips

print(get_valid_proxy_ips())

No código acima, primeiro usamos a função fetch_proxy_ips() para rastrear as primeiras 10 páginas da lista de IP do proxy de alto anonimato no site do proxy West Spur e, em seguida, usamos a função test_proxy_ip() para testar se cada IP do proxy está disponível (o URL de teste é http://httpbin.org/ip) e, finalmente, use a função get_valid_proxy_ips() para retornar a lista de IPs de proxy disponíveis.

3. Use IP proxy

Os parâmetros dos proxies podem ser especificados na biblioteca de solicitações usando o IP do proxy. O parâmetro proxies é do tipo dicionário, onde o nome da chave é o protocolo (http ou https) e o valor da chave é o IP do proxy e seu número de porta. Por exemplo, se quisermos usar um servidor proxy com um endereço IP proxy "1.2.3.4" e um número de porta "5678", o parâmetro proxies deve ser:

proxies = {
    'http': 'http://1.2.3.4:5678',
    'https': 'https://1.2.3.4:5678'
}

A seguir está um exemplo simples de rastreador que usa IP proxy para rastrear a página de pesquisa do produto JD:

import requests

# 使用代理IP爬取京东商品搜索页面
def crawl_jd_goods(query, proxy_ip):
    url_template = 'https://search.jd.com/Search?keyword={}&enc=utf-8&page={}'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
    proxies = {
        'http': 'http://' + proxy_ip,
        'https': 'https://' + proxy_ip
    }
    for page in range(1, 6):
        url = url_template.format(query, page)
        resp = requests.get(url, headers=headers, proxies=proxies)
        print(resp.status_code)
        print(resp.text)

# 获取可用的代理IP
proxy_ips = get_valid_proxy_ips()

# 使用第一个可用的代理IP爬取京东商品搜索页面
query = 'Python编程'
proxy_ip = proxy_ips[0]
crawl_jd_goods(query, proxy_ip)

No código acima, primeiro obtemos a lista de IPs de proxy disponíveis e, em seguida, usamos o primeiro IP de proxy disponível para rastrear a página de pesquisa do produto JD.com (a palavra-chave de pesquisa é "Programação Python").

4. Resumo

Deve-se notar que o IP proxy não é uma panacéia. Em alguns sites com mecanismos anti-crawler muito poderosos, até mesmo o uso de IP proxy pode ser facilmente banido. Além disso, alguns IPs proxy têm baixa qualidade, velocidades de acesso lentas e até retornam respostas de erro. Portanto, na utilização real, é necessário selecionar o IP do proxy disponível de acordo com a situação específica.

Acho que você gosta

Origin blog.csdn.net/wq10_12/article/details/132735717
Recomendado
Clasificación