Escribir un rastreador web usando python

prefacio

Este artículo es mi experiencia de escribir rastreadores para obtener datos, lo que implica la recopilación y el preprocesamiento de datos. Para almacenamiento de datos, procesamiento y análisis de datos, visualización de datos/visualización de datos y aplicación de datos, preste atención a mis nuevos artículos. Solo es adecuado para la entrada de pitones y reptiles principiantes.
Nota especial:
**1. El contenido de este artículo es solo para estudio e intercambio personal, y el uso comercial está prohibido. [Indique la fuente para la reimpresión] https://blog.csdn.net/qq_44092306/
2. Este artículo solo presenta la idea de los rastreadores y no explica los módulos a los que se hace referencia en detalle. Para obtener explicaciones detalladas de los módulos, consulte otros materiales. ¡Gracias!

1. Por qué usar rastreadores

En pocas palabras, el propósito de usar rastreadores es reducir la carga de trabajo. Por ejemplo, cuando necesitamos obtener alguna información, la información existe en diferentes páginas web y la cantidad de datos es enorme, simplemente confiar en el registro manual desperdiciará mucho tiempo y energía. En este momento, podemos usar rastreadores como herramienta para obtener estos conjuntos de datos, lo que reduce en gran medida el tiempo de trabajo mecánico. En big data, la adquisición de datos a menudo es inseparable de los rastreadores.

2. Requisitos de conocimiento para escribir reptiles

  1. Conceptos básicos de Python : reglas gramaticales, declaraciones de control, estructuras de datos (diccionario, tupla, lista), funciones, módulos
  2. Fundación HTML, Fundación CSS, http, protocolo https
  3. Procesamiento flexible de cadenas y procesamiento de estructuras de datos

3. Determinar la biblioteca de herramientas utilizada por el rastreador

La versión de python que uso es 3

from bs4 import BeautifulSoup
import requests
import lxml

4. Determinar el conjunto de datos a adquirir

Posicionamiento de recursos: Obtener información de listado de viviendas de segunda mano en Beike.com
ilustrar:Cuando elegimos la URL de destino, intentamos elegir un sitio web normal con muchos usuarios, aunque encontraremos algunas medidas anti-rastreo. Trate de no rastrear sitios web pequeños, porque algunos de los formatos de página web de sitios web pequeños no son fijos. Cuando escribamos el código del rastreador, encontraremos que no se puede usar universalmente, lo que complica el rastreo.

Conjunto de datos para obtener:Título de la propiedad, nombre de la propiedad, introducción, precio (también se pueden obtener otros elementos de datos, estos elementos son solo ejemplos)

4.1 Análisis de los cambios de dirección de URL

URL de vivienda de segunda mano de Shell
Al navegar por la página web, descubrí que hay una barra de navegación de paginación en la parte inferior. Al hacer clic en la página siguiente, la URL cambia a
https://jn.ke.com/ershoufang/pg2/
Por lo tanto, la página de inicio es https:/ /jn.ke.com/ershoufang/ pg1/. Hasta ahora, el análisis de cambio de URL está completo.
El propósito de analizar los cambios de dirección URL es recorrer estas URL a través del método request.get() para obtener elementos de la página HTML.

4.2 Obtener el área HTML donde se encuentra el conjunto de datos de destino

Haga clic en F12 en la página web de destino para ingresar al modo de desarrollador. Solo queremos obtener la información de la lista, por lo que otros HTML son datos inútiles y no es necesario obtenerlos. Lo que hacemos es tratar de reducir el área objetivo en la menor medida posible.
área objetivo
A través del análisis, el área donde se encuentran los elementos de la lista está en la etiqueta <div data-componet=''list''>. A través de la exploración, se encuentra que el área se puede reducir aún más. Eventualmente, el área objetivo se reduce a

5. Comienza a rastrear páginas

5.1 Navegador simulado

Debido a que la mayoría de los sitios web tienen un mecanismo anti-rastreo, debemos permitir que el programa simule el navegador. Al configurar el proxy y los encabezados de solicitud, así como el intervalo de tiempo, estos métodos pueden evitar que la mayoría de los sitios web cuelguen nuestras solicitudes.

# 请求头
    headers = {
    
    
        'User-Agent': 'Mozilla / 5.0(Windows NT 10.0Win64x64) AppleWebKit / 537.36(XHTML, likeGecko) Chrome '
                      '/ 11.1.1111.111Safari / 111.11'
    }
    # 设置代理 http-协议类型 101.4.136.34-代理ip  82-代理端口
    proxy = {
    
    'http': 'http://101.4.136.34:82'}
    r = requests.get(url, headers=headers, proxies=proxy)
    r.encoding = 'gbk' #设置编码格式
    context = r.text
    # 第一个参数表示被解析的html内容,第二个参数表示使用的解析器
    soup = BeautifulSoup(context, 'lxml')
  

El encabezado de la solicitud debe verse con F12. Seleccione
ver encabezado de solicitud
encabezado de solicitud 1
uno de los nombres, vea los encabezados, busque el siguiente contenido y cópielo en el código.
encabezado de solicitud 3
Soup es nuestra página HTML analizada. Puede intentar imprimir (sopa) para ver qué es.
es un documento HTML correspondiente a la URL

5.2 Obtener los datos en el área HTML de destino

A través de los pasos anteriores, redujimos el rango del conjunto de datos a la etiqueta <div class=''info clear''>. Ahora podemos obtener el contenido dentro.

  1. Obtener todos los <div class=''info clear''> elementos de una página
info_clear_all = soup.find_all('div', _class='info clear')
  1. recorrer info_clear_all
  2. Encuentre el área donde se encuentran los datos de destino dentro del rango transversal del iterador
  3. El código específico para obtener el contenido específico del área de datos objetivo
    es el siguiente:
from webbrowser import Mozilla
from bs4 import BeautifulSoup
import requests
import lxml
import random
import time

url = 'https://jn.ke.com/ershoufang/'


def getSoup(Url):
    # 设置请求头
    headers = {
    
    
        # headers中的内容为您浏览器的具体信息,请参考上述补充
    }
    # 设置代理 http-协议类型 101.4.136.34-代理ip  82-代理端口
    proxy = {
    
    'http': 'http://101.4.136.34:82'}
    r = requests.get(Url, headers=headers, proxies=proxy)
    # 获取网页的编码格式
    encode = r.encoding
    # 获取HTML网页
    context = r.text
    # 解析网页
    soup = BeautifulSoup(context, 'lxml')
    return soup


def getContext():
    soup = getSoup(url)
    # 获取<div class='info clear'></div>所有标签项
    info_clear_all = soup.find_all('div', class_='info clear')

    for a in info_clear_all:
        # 获取标题
        label_a_title = a.find('a', class_='VIEWDATA CLICKDATA maidian-detail')  # 获取标题所在的a标签
        title = label_a_title.attrs['title']  # 获取标题
        print('标题:'+title)
        # 获取楼盘名称
        positionInfo = a.find('div', class_='positionInfo')  # 缩小楼盘名称所在范围
        label_a = positionInfo.find('a')  # 获取<a>标签
        building_name = label_a.text  # 获取楼盘名称
        print('楼盘名称:' + building_name)
        # 获取楼盘简介
        houseInfo = a.find('div', class_='houseInfo')  # 获取简介所在的div范围
        introduce = houseInfo.text.replace(' ', '').strip().replace('\n', '')  # 获取简介
        print('楼盘简介:'+introduce)
        # 获取楼盘价格
        totalPrice = a.find('div', class_='totalPrice')  # 获取楼盘价格所在div范围
        price = totalPrice.text  # 获取楼盘价格
        print('楼盘价格:'+price+'\n')


if __name__ == "__main__":
    getContext()

resultado de la operación
resultado de la operación

Supongo que te gusta

Origin blog.csdn.net/qq_44092306/article/details/113250023
Recomendado
Clasificación