Rastreador de Python (tres): kit de herramientas de rastreo común

En el artículo anterior, rastrear el aluvión de Bilibili para la visualización de nubes gráficas: rastrear la visualización de la nube de palabras de subtítulos de "Charlotte Annoyance" en la estación B , es un ejemplo de la combinación de datos de rastreo + visualización de datos, aquí presentaremos las herramientas comunes de los rastreadores;

Tabla de contenido

Herramientas comunes

Peticiones

lxml

Hermosa Sopa

tqdm

ffmpy3

matplotlib

marinero


Herramientas comunes

Los tres pasos del rastreo de datos: descargar datos --- analizar datos --- analizar datos . Se utilizan algunas herramientas comunes. Las solicitudes son para descargar contenido de URL, expresiones regulares, beautifulsoup y lxml para analizar rápidamente documentos html. Tqdm puede mostrar el progreso del procesamiento, ffmpy procesa el flujo de video y matplotlib y seaborn pueden analizar y mostrar visualmente los datos;

  • Peticiones

El paquete de solicitudes proporciona métodos como get, put, post y delete para URL para simular la interacción. Response.text regresa en formato Unicode y, por lo general, debe convertirse al formato utf-8, de lo contrario, se distorsionará. response.content está en modo binario, puede descargar videos y similares, si desea verlo, debe decodificarlo en formato utf-8.
  Ya sea mediante response.content.decode ("utf-8) o mediante response.encoding =" utf-8 ", se puede evitar el problema de los códigos confusos.

response  = requests.get("https://www.baidu.com")
print(type(response))
print(response.status_code)
print(type(response.text))
response.enconding = "utf-8'
print(response.text)
print(response.cookies)
print(response.content)
print(response.content.decode("utf-8"))

 Obtener solicitud con parámetros y encabezado:

url = 'http://www.baidu.com'
headers={
        "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"
         }
data = {
    'name':'yzg',
    'age':'18'
}
response = requests.get(url,params=data,headers=headers)
print(response.url)
print(response.text)

Publicar datos en la dirección URL:

url = 'http://xxx'
data = {
    'name':'yzg',
    'age':'23'
    }
response = requests.post(url,data=data)
print(response.text)

Obtenga la respuesta después del acceso a la URL:

response = requests.get("http://www.baidu.com")
#打印请求页面的状态(状态码)
print(type(response.status_code),response.status_code)
#打印请求网址的headers所有信息
print(type(response.headers),response.headers)
#打印请求网址的cookies信息
print(type(response.cookies),response.cookies)
#打印请求网址的地址
print(type(response.url),response.url)
#打印请求的历史记录(以列表的形式显示)
print(type(response.history),response.history)

Obtener cookies, que se pueden utilizar para la retención de sesiones;

response = requests.get('https://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
    print(key,'==',value)

url = 'http://xxxx'
cookies = {'xx': 'x', 'xx': 'y'}
r = requests.get(url, cookies=cookies)
print(r.json())
  • lxml

lxml es una biblioteca de análisis que admite métodos de análisis HTML / XML / XPath, y la eficiencia del análisis es muy alta. XPath (XML Path Language) es un lenguaje para encontrar información en documentos XML. Originalmente se usó para buscar documentos XML. Pero también es adecuado para buscar documentos HTML;

Para obtener más referencias de uso de XPath: http://www.w3school.com.cn/xpath/index.asp

Para obtener más referencias sobre el uso de la biblioteca python lxml: http://lxml.de/

Reglas comunes de xpath:

expresión descripción
nombre del nodo Seleccione todos los nodos secundarios de este nodo
/ Seleccionar hijos directos del nodo actual
// Seleccionar nodos descendientes del nodo actual
. Seleccionar nodo actual
.. Seleccione el nodo padre del nodo actual
@ Seleccionar atributo
* Comodín, seleccione todos los nodos de elementos y nombres de elementos
@ * Seleccionar todos los atributos
[@attrib] Seleccionar todos los elementos con un atributo determinado
[@ attrib = 'valor'] Seleccionar todos los elementos con un atributo dado con un valor dado
[etiqueta] Seleccione todos los nodos secundarios directos con el elemento especificado
[etiqueta = 'texto'] Seleccione todos los elementos especificados y el contenido del texto es un nodo de texto

Lea el texto y analice el nodo:

from lxml import etree

text='''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">第一个</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0"><a href="link5.html">a属性</a>
     </ul>
 </div>
'''
html=etree.HTML(text) #初始化生成一个XPath解析对象
result=etree.tostring(html,encoding='utf-8')   #解析对象输出代码
print(type(html))
print(type(result))
print(result.decode('utf-8'))

Según la dirección URL rastreada, el contenido de texto de la etiqueta d se obtiene mediante el método de análisis xpath:

url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=183896111'
headers={
        "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"
         }
response=requests.get(url,headers=headers)
html=etree.HTML(response.content)
d_list=html.xpath("//d//text()")
  • Hermosa Sopa

Al igual que lxml, BeautifulSoup también es un analizador de formato xml. Es relativamente más fácil no involucrar el contenido de conocimiento de xpath. Beautifulsoup cargará todo el contenido de la página web en el árbol DOM durante el análisis. La sobrecarga de memoria y el consumo de tiempo son relativamente altos. No recomendado para contenido masivo. Sin embargo, BeautifulSoup no necesita un contenido de página web claramente estructurado, porque puede encontrar directamente las etiquetas que queremos, es más adecuado para algunas páginas web con una estructura HTML poco clara;

Cómo usarlo puede consultar: https://www.crummy.com/software/BeautifulSoup/

from bs4 import BeautifulSoup
html = """
<html><head><title>haha,The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""

soup = BeautifulSoup(html,'lxml')
# print(soup.prettify())   # 格式化
print(soup.title)  
print(soup.title.name)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)  # p标签
print(soup.p["class"])
print(soup.a)
print(soup.find_all('a'))
print(soup.find(id='link3'))
  • tqdm

tqdm es una barra de progreso de Python. Puede agregar un mensaje de solicitud de progreso en el ciclo largo de Python. El usuario solo necesita encapsular cualquier iterador tqdm (iterador). Después de atravesar el rastreo de datos y escribir en el proceso local, puede usar tqdm para realizar la visualización de la barra de progreso:

# 方法1:
import time
from tqdm import tqdm  
for i in tqdm(range(100)):  
    time.sleep(0.01)

#方法2:
import time
from tqdm import trange
for i in trange(100):
    time.sleep(0.01) 

Puede establecer una descripción para la barra de progreso:

pbar = tqdm(["a", "b", "c", "d"])  
for char in pbar:  
    # 设置描述
    pbar.set_description("Processing %s" % char)
    time.sleep(1)

  • ffmpy3

ffmpy3 es una rama de ffmpy, es un simple contenedor de línea de comandos de FFmpeg. ffmpy implementa una interfaz Pythonic para ejecutar FFmpeg a través de la línea de comando y usar el módulo de subproceso de Python para la ejecución sincrónica

import ffmpy3
ff = ffmpy3.FFmpeg(
    inputs={'input.mp4': None},
    outputs={'output.avi': None}
)
ff.run()
  • matplotlib

matplotlib es la biblioteca de dibujo más famosa de Python. Proporciona un conjunto de API de comando similar a matlab, que es muy adecuado para el dibujo interactivo. Y también se puede usar fácilmente como control de dibujo. Seaborn también se basa en la encapsulación de matplotlib, pero matplotlib es de un nivel más bajo y proporciona funciones más ricas. Consulte: https://matplotlib.org/ 

matplotlib.pyplot es una colección de funciones de estilo comando. Cada función de pyplot realiza algunos cambios en una imagen, como crear un gráfico, crear un área de dibujo en el gráfico, agregar una línea al área de dibujo, etc. En matplotlib.pyplot, varios estados se guardan mediante llamadas a funciones, de modo que se pueden rastrear cosas como la imagen actual y el área de dibujo en cualquier momento. La función de dibujo actúa directamente sobre los ejes actuales (un nombre propio en matplotlib, una parte del gráfico, no el sistema de coordenadas en matemáticas).

import matplotlib.pyplot as plt
plt.plot([2,4,7,18])
plt.ylabel('some numbers')
plt.show()
%matplotlib inline

Figura: Antes de cualquier dibujo, necesitamos un objeto Figura, que puede entenderse como un tablero de dibujo para comenzar a dibujar.

import matplotlib.pyplot as plt
fig = plt.figure()
%matplotlib inline

Ejes: los ejes deben definirse después del objeto Figura y los ejes deben agregarse; hay 3 figuras en la figura;

fig = plt.figure()
ax1 = fig.add_subplot(131)
ax2 = fig.add_subplot(132)
ax3 = fig.add_subplot(133)
ax1.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',ylabel='Y-Axis', xlabel='X-Axis')
ax2.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',ylabel='Y-Axis', xlabel='X-Axis')
ax3.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',ylabel='Y-Axis', xlabel='X-Axis')
plt.show()

También es posible definir el número de subimágenes y ejes a la vez;

fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0,0].set(title='Upper Left')
axes[0,1].set(title='Upper Right')
axes[1,0].set(title='Lower Left')
axes[1,1].set(title='Lower Right')

matplotlib proporciona gráficos de líneas, gráficos de dispersión, histogramas, gráficos de distribución, gráficos circulares, gráficos de relaciones, etc., que pueden explorarse sobre esta base;

  • marinero

Con respecto al procesamiento de datos de seaborn combinado con pandas, hay métodos de uso detallados en mi publicación anterior del blog: Exploración de visualización de datos de Seaborn (conjunto de datos de consejos)

Supongo que te gusta

Origin blog.csdn.net/yezonggang/article/details/106662178
Recomendado
Clasificación