Artigo Diretório
1. Rastreie a página original
A página original a ser rastreada aqui é a seguinte:
2. Código de erro
Não sei se vocês estão usando o código mostrado na figura abaixo assim como eu?
import requests
url = "http://item.jd.com/2967929.html"
try:
r = requests.get(url)
r.raise_for_status()
print(r.status_code)
r.encoding = r.apparent_encoding
print(r.text[:1001])
except:
print("爬取异常")
O resultado que obtive com o código acima é assim
Há apenas um URL e o conteúdo não é exibido conforme o esperado. Qual é o motivo? Vamos analisá-lo.
3. Análise de erro
Análise de erros usando o ambiente interativo IDLE
(1) Visualize o código de status e o método de codificação
Ao verificar o código de status e o método de codificação, descobrimos que não parece haver nenhum problema. Neste momento, devemos considerar se Jingdong impôs restrições de agente do usuário aos rastreadores.
(2) Saída das informações do cabeçalho enviadas para Jingdong
Ao enviar as informações do cabeçalho, descobrimos que, nas informações enviadas ao JD.com, informamos honestamente ao rastreador usado pelo JD.com para obter informações. Como o JD.com fez uma revisão da fonte do rastreador, não podemos visualizar o conteúdo rastreado.
(3) Solução
Agora que a causa do erro foi encontrada, a solução correspondente é óbvia. Precisamos apenas usar um dicionário para construir um par de valores-chave e alterar as informações do cabeçalho. Altere o conteúdo do user-agent acima para qualquer navegador.
headers = {
"User-Agent": "Mozilla/5.0"}
Mozilla / 5.0 significa que a visita de envio pode ser qualquer navegador, como Firefox, Google, etc. É o campo de identificação do navegador padrão.
4. Código completo
import requests
url = "http://item.jd.com/2967929.html"
headers = {
"User-Agent": "Mozilla/5.0"}
try:
r = requests.get(url, headers=headers) #因为京东有user-agent限制所以要加入头部信息
r.raise_for_status()
print(r.status_code)
r.encoding = r.apparent_encoding
print(r.text[:1001])
except:
print("爬取异常")
O conteúdo de saída é o seguinte, podemos ver que o conteúdo foi rastreado normalmente
No final deste artigo, indique quaisquer erros ~