De mãos dadas com você para começar a usar o rastreador Python (dois, conhecimento preliminar do rastreador)

1. Base do protocolo de rede de computadores

Um processo completo de solicitação de rede é o seguinte:
Insira a descrição da imagem aqui
depois que o navegador insere o nome de domínio, o navegador primeiro visita o servidor DNS, o DNS retorna o ip para o navegador e, em seguida, o navegador estabelece uma conexão TCP com o servidor web, o navegador pode enviar uma solicitação http e o servidor web retorna Os dados são enviados ao navegador e a próxima etapa é o navegador analisar o conteúdo.

Protocolo de rede de sete camadas:

  • Camada de aplicação Http、ftp、pop3、DNS
  • Camada de apresentação
  • Camada de sessão
  • Camada de transporte TCP、UDP
  • Camada de rede ICMP、IP、IDMP
  • camada de link de dados ARP、RARP
  • Meio de transmissão física da camada física

二 、 Html 、 Css 、 Javascript

Os três elementos de uma página da web: Html、Css、Javascript
Htmlé o esqueleto que carrega o conteúdo da página da web,
Cssé o estilo
Javascriptda página da web , é o script que a página da web executa;

O conteúdo que precisamos rastrear geralmente faz parte do conteúdo HTML da página da web, portanto, podemos obtê-lo se estiver visível e rastreá-lo, desde que possamos vê-lo na página.

Processo de carregamento do navegador:
construção de carregamento de sub-recurso de árvore DOM (carregar css externo, js, imagens e outros recursos externos) renderização no estilo (execução de css)

A localização de elementos da página geralmente é encontrada na árvore DOM:
Insira a descrição da imagem aqui

Carregamento assíncrono Ajax

Alguns dados são enviados para o servidor por meio de js e os dados são retornados e os dados são inseridos dinamicamente na página por meio de js. Este método não atualiza a página e o efeito de experiência do usuário é bom.
Os dados retornados pelo ajax podem estar no formato json ou fazer parte de uma página html.

Páginas da web dinâmicas e páginas da web estáticas:
dinâmicas: os dados interagem com o plano de fundo e podem ser alterados (ajax)
estáticos: os dados são imutáveis ​​(você precisa modificar o código-fonte se quiser mudar)

A experiência dinâmica da página da web é boa, carregamento parcial, bom para o servidor, boa escalabilidade
A página da web estática é boa para SEO

Solicitação GET e solicitação POST

Os parâmetros GET são incluídos no URL e POST os passa pelo corpo da solicitação.

  1. GET é inofensivo quando o navegador é revertido e o POST enviará a solicitação novamente
  2. As solicitações GET só podem ser codificadas por url, enquanto o POST oferece suporte a vários métodos de codificação
  3. Os parâmetros transmitidos na URL para solicitações GET são limitados em comprimento, enquanto POST não
  4. GET é menos seguro do que POST, porque os parâmetros são expostos diretamente na URL, portanto, informações confidenciais não podem ser passadas

3 tipos de conteúdo

  1. application/x-www-form-urlencoded
    O POST envia os dados, a forma nativa do navegador, se o atributo enctype não estiver definido, os dados serão enviados em application / x-www-form-urlencoded finalmente. Os dados enviados são codificados de acordo com key1 = val1 & key2 = val2, e key e val são transcodificados em URL.

  2. multipart/form-data
    Arquivo de upload de formulário.

  3. application/json
    Diga ao servidor que o corpo da mensagem é uma string JSON serializada.

Três, o método básico de rastreamento

1. Classificação do plano de coleta

Geralmente, coletamos apenas os dados especificados exigidos pelo site de coleta e o esquema de coleta é classificado:

  1. Use o protocolo http para coletar a análise da página
  2. Use a interface API para coletar dados de aplicativos
  3. Use a coleção de api do site de destino - Weibo, github

2. solicita biblioteca

Endereço oficial do documento: https://requests.readthedocs.io/zh_CN/latest/
Instalação:

pip install requests

Se você usa um ambiente virtual, certifique-se de instalá-lo novamente no ambiente virtual para garantir o funcionamento normal do projeto usando o ambiente virtual

Em primeiro lugar, rastreie a página do Baidu:

import requests

res = requests.get("http://www.baidu.com")
print(res.text)

O código html da página do Baidu é impresso: os
Insira a descrição da imagem aqui
itens específicos serão apresentados em detalhes posteriormente.

3. Expressões regulares

As expressões regulares são para um melhor processamento das strings obtidas e mais convenientes para obter os caracteres de que precisamos.
Sintaxe regular comumente usada:

gramática efeito
. Corresponde a qualquer caractere (sem incluir nova linha)
^ Corresponder à posição inicial, corresponder ao início de cada linha no modo multilinha
$ Combine a posição final, combine o final de cada linha no modo multilinha
* Corresponde ao metacaractere anterior 0 ou mais vezes
+ Corresponde ao metacaractere anterior uma ou mais vezes
? Corresponde ao metacaractere anterior 0 a 1 vezes
{m, n} Corresponde ao metacaractere anterior m a n vezes
\\ Personagem de fuga
[] conjunto de caracteres
| OR lógico
\ b Corresponde a uma string vazia no início ou no final de uma palavra
\ B Corresponde a uma string vazia que não está no início ou no final de uma palavra
\ d Corresponde a um número
\ D Corresponder a não dígitos
\ s Corresponde a qualquer espaço em branco
\ S Corresponder a espaços em branco não arbitrários
\W Corresponde a qualquer caractere entre números, letras e sublinhados
\W Corresponde a qualquer caractere diferente de números, letras e sublinhados

Python usa regular para extrair aniversários simplesmente:

import re

info = "姓名:zhangsan 生日:1995年12月12日 入职日期:2020年12月12日"

# print(re.findall("\d{4}", info))
match_result = re.match(".*生日.*?(\d{4})", info)
print(match_result.group(1))  # 1995

4. Uso da bela sopa

  1. Instalação
    (se você estiver usando um ambiente virtual, você precisa mudar para o ambiente virtual para instalação)
pip install beautifulsoup4
  1. Documento oficial
    https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
  2. Simples de usar
from bs4 import BeautifulSoup
import requests

baidu = requests.get("http://www.baidu.com")
baidu.encoding = "utf-8"

bs = BeautifulSoup(baidu.text, "html.parser")
title = bs.find("title")
print(title.string)

navs = bs.find_all("img")
for i in navs:
    print(i)

resultado:
Insira a descrição da imagem aqui

5. Sintaxe básica do Xpath

Aqui, apresentamos principalmente o Seletor.

Instalação:
download do pacote Python: https://www.lfd.uci.edu/~gohlke/pythonlibs/
Se você instalar diretamente lxmlou se a scrapyinstalação não for bem-sucedida, você pode ir para o site acima para baixar o pacote de instalação por sua vez e pipinstalá-lo:

pip install lxml
pip install Twisted-20.3.0-cp38-cp38-win32.whl
pip install Scrapy-1.8.0-py2.py3-none-any.whl

xpath usa expressões de caminho para navegar em xml e html.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Uso simples:

import requests
from scrapy import Selector

baidu = requests.get("http://www.baidu.com")
baidu.encoding = "utf-8"
html = baidu.text

sel = Selector(text=html)
tag = sel.xpath("//*[@id='lg']/img").extract()[0]
print(tag)
# <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129">

6. Seletor de CSS para extrair elementos

Insira a descrição da imagem aqui

import requests
from scrapy import Selector

baidu = requests.get("http://www.baidu.com")
baidu.encoding = "utf-8"
html = baidu.text

sel = Selector(text=html)

imgs = sel.css("img").extract()
for i in imgs:
    print(i)

# <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129">
# <img src="//www.baidu.com/img/gs.gif">

Acho que você gosta

Origin blog.csdn.net/zy1281539626/article/details/111144236
Recomendado
Clasificación