Python-selenium rastrea la información de compra del cliente (análisis front-end + código del rastreador)

prefacio

Recientemente, la empresa necesita comprar datos de algunos usuarios, como paquetes de regalo con la mayor cantidad total

inserte la descripción de la imagen aquí

Pero encontré que el sitio web no proporciona un canal de descarga (el operador me dijo, si no es mi culpa┓(;´_`)┏)
inserte la descripción de la imagen aquí

"Descubrí que una página tiene solo diez datos y no hay saltos, por lo que simplemente rastrear la página web definitivamente no es suficiente.
Luego escribí un rastreador para obtener el formulario y ha estado fallando. Descubrí que el sitio web puede tener un grado relativamente alto de anti-rastreador. . .
Busqué en Internet y encontré la biblioteca de selenium, no la había usado antes, es bastante interesante, así que decidí usar esta.

Preparar

El conocimiento básico sigue siendo necesario, puedes ver el gran blog

Luego instalemos el controlador del navegador. Aquí usamos edge, que debería estar disponible.
Verifique primero la versión , busque el controlador
inserte la descripción de la imagen aquí
correspondiente , descárguelo, descomprímalo, colóquelo en el directorio de python y guarde la ruta actual en la variable de entorno (Mi PC>>Haga clic con el botón derecho en Propiedades>>Configuración avanzada del sistema>>Avanzado>>Variables de entorno>>Variables del sistema>>Ruta)
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Pero cuando ejecutamos el programa, encontraremos errores.
inserte la descripción de la imagen aquí

De hecho, simplemente cambie el nombre del controlador por el que aparece en este informe de error.
inserte la descripción de la imagen aquí

Instalar sin biblioteca de selenio

esa es una buena preparación

1. Abra la página web

Selenium es una operación de simulación, así que comience abriendo el navegador
Primero importamos la biblioteca y establecemos la ubicación

from selenium import webdriver
import time
import pandas as pd
import numpy as np

pd.set_option('display.max_rows', 50)
pd.set_option('display.max_columns', 10)

Luego abrimos el navegador, aquí usamos edge, deberían estar todos, vamos directo al sitio web

driver = webdriver.Edge()

driver.get('https://me.modian.com/u/user_index')

time.sleep(1)

inserte la descripción de la imagen aquí
Tenga en cuenta que la pantalla es diferente del navegador abierto normal

2. Cuenta de inicio de sesión

Dado que es completamente automático, necesitamos usar la contraseña de la cuenta. Mirando la posición de este botón
inserte la descripción de la imagen aquí
está bien, encontramos que podemos usar class para ubicar la etiqueta superior, luego h3, y finalmente la operación span+click

Los blogs mencionados anteriormente en esta parte tienen instrucciones, por lo que puede echarles un vistazo primero.

El siguiente paso es ubicar y hacer clic

Aquí hay un intervalo de tiempo porque tenemos que esperar a que el navegador responda, y lo mismo se aplica más adelante.

button1=driver.find_element_by_xpath("//*[@class='login_field']/h3/span")
time.sleep(1)
button1.click()

inserte la descripción de la imagen aquí

El siguiente paso es encontrar dos cuadros de entrada y luego iniciar sesión, es decir, encontrar tres componentes

inserte la descripción de la imagen aquí

Todavía ubique el nivel inferior a través de la clase, y luego simulamos dos entradas y un clic (descárguelo por mí sin cambiar la contraseña de la cuenta y ejecútelo directamente Ψ ( ̄∀ ̄) Ψ)

time.sleep(1)
driver.find_element_by_xpath("//*[@class='phone']/input").send_keys('你的账号')
driver.find_element_by_xpath("//*[@class='password']/input").send_keys('你的密码')
button2=driver.find_element_by_xpath("//*[@class='loginBtn hover other_input']")
button2.click()

Ahora hemos ingresado a la página de inicio de la cuenta, pero la información del cliente aún no está aquí, está aquí,
inserte la descripción de la imagen aquí
por lo que aún debemos hacer clic en

time.sleep(1)
driver.find_element_by_xpath("//*[@id='user_manage']/a").click()
time.sleep(1)

Ok por fin ingresé a la página de datos, perfecto! (* ^ - ^ *)ゞ

Leer y guardar datos

Primero crea un marco de datos para guardar los datos.

df = pd.DataFrame(columns = ['id','name','金额']) 
num=0

Luego mire dónde están los datos
inserte la descripción de la imagen aquí
, luego podemos leer todas las líneas de información de acuerdo con la clase y luego dividir cada línea de información

userslist = driver.find_elements_by_xpath("//tr[@class='el-table__row']")
for user in userslist:
    data=user.text.split('\n')
    print(data)

Después de todo, es información de la empresa y el código es grueso, pero aún se puede ver que un cliente tiene 7 información

inserte la descripción de la imagen aquí
El siguiente paso es seleccionar la información que queremos guardar y cambiar la impresión (datos) al siguiente código

Tenga en cuenta que no queremos modificar las filas del grupo en el registro de la última transacción, así que haga un juicio

if len(data) == 7 :  
	if data[2] == "成交客户":
	                df.loc[num,'id'] = data[3]
	                df.loc[num,'name'] = data[0]
	                df.loc[num,'金额'] = data[4]
	                num = num+1

Sin embargo, se puede informar un error durante la operación. Esta es otra razón.
En el ejemplo de ahora, todos los grupos tienen datos. ¿Qué sucede si este elemento está en blanco?
inserte la descripción de la imagen aquí
Oh, solo hay seis datos, por lo que, por supuesto, está mal según el formato original, así que agregue otro juicio

if len(data) == 6:
            if data[1] == "成交客户":
                df.loc[num,'id'] = data[2]
                df.loc[num,'name'] = data[0]
                df.loc[num,'金额'] = data[3]
                num = num+1

De esta manera, podemos obtener los datos de una página y, por supuesto, tenemos que pasar la página más tarde, ¡la forma antigua es encontrar el botón y hacer
inserte la descripción de la imagen aquíclic en él!

driver.find_element_by_xpath("//*[@class='el-icon el-icon-arrow-right']").click()
#print(df[-10:-1])
time.sleep(2)

De esta manera, puede leer página por página. El tiempo anterior se puede acortar si su red es lo suficientemente rápida, de lo contrario, se repetirá la lectura. El
siguiente es el trabajo repetido. Para ello,

for i in range(1):  #你的页数!!!!!!!!!!!!!!!!!!别问我怎么只有一页数据
    userslist = driver.find_elements_by_xpath("//tr[@class='el-table__row']")
    for user in userslist:
        data=user.text.split('\n')
        if len(data) == 7 :
            if data[2] == "成交客户":
                df.loc[num,'id'] = data[3]
                df.loc[num,'name'] = data[0]
                df.loc[num,'金额'] = data[4]
                num = num+1
        if len(data) == 6:
            if data[1] == "成交客户":
                df.loc[num,'id'] = data[2]
                df.loc[num,'name'] = data[0]
                df.loc[num,'金额'] = data[3]
                num = num+1
    driver.find_element_by_xpath("//*[@class='el-icon el-icon-arrow-right']").click()
    #print(df[-10:-1])
    time.sleep(2)

Finalmente agregue un guardado

df.to_excel(r'D:\allmoney.xlsx',index = False)

Finalización * \ (^ o ^) / *

código completo

# -*- coding: utf-8 -*-
"""
Created on Wed Feb 23 19:08:35 2022

@author: xyyl
"""
# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

from selenium import webdriver
import time
import pandas as pd
import numpy as np

pd.set_option('display.max_rows', 50)
pd.set_option('display.max_columns', 10)

#打开
driver = webdriver.Edge()

driver.get('https://me.modian.com/u/user_index')

time.sleep(1)

#定位账号密码登录
button1=driver.find_element_by_xpath("//*[@class='login_field']/h3/span")
time.sleep(1)
button1.click()

#输入账号密码
time.sleep(1)
driver.find_element_by_xpath("//*[@class='phone']/input").send_keys('你的账号')
driver.find_element_by_xpath("//*[@class='password']/input").send_keys('你的密码')
button2=driver.find_element_by_xpath("//*[@class='loginBtn hover other_input']")
button2.click()

#跳转信息
time.sleep(1)
driver.find_element_by_xpath("//*[@id='user_manage']/a").click()
time.sleep(1)

#创建dataframe
df = pd.DataFrame(columns = ['id','name','金额']) 
num=0
#定位客户列表

for i in range(1):  #你的页数!!!!!!!!!!!!!!!!!!别问我怎么只有一页数据
    userslist = driver.find_elements_by_xpath("//tr[@class='el-table__row']")
    for user in userslist:
        data=user.text.split('\n')
        if len(data) == 7 :
            if data[2] == "成交客户":
                df.loc[num,'id'] = data[3]
                df.loc[num,'name'] = data[0]
                df.loc[num,'金额'] = data[4]
                num = num+1
        if len(data) == 6:
            if data[1] == "成交客户":
                df.loc[num,'id'] = data[2]
                df.loc[num,'name'] = data[0]
                df.loc[num,'金额'] = data[3]
                num = num+1
    driver.find_element_by_xpath("//*[@class='el-icon el-icon-arrow-right']").click()
    #print(df[-10:-1])
    time.sleep(2)
df.to_excel(r'D:\allmoney.xlsx',index = False)

El efecto es bueno, excepto que los datos se ejecutan durante mucho tiempo, y se puede comparar con un
blogger que es como un sitio web que está a punto de terminarse y no funciona ( ̄ω ̄;)

Supongo que te gusta

Origin blog.csdn.net/qq_44616044/article/details/123547468
Recomendado
Clasificación