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:
- 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.
- 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.
- 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.
- Adicione o campo "User-Agent" no cabeçalho da solicitação para simular uma solicitação do navegador e evitar ser rejeitada pelo servidor.
- 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.