Python crawler cuatro: simulación de clic del mouse, análisis JS

Uno, arrastra el objetivo

http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist

 

2. Análisis de la demanda

El requisito es sencillo, es decir, rastrear todos los datos.

Por supuesto, también puede proporcionar una función para rastrear todos los datos después de buscar una determinada palabra clave.

La dificultad es que no importa dónde haga clic, la URL siempre se ve igual, lo que aumenta la dificultad de rastreo .

Qué debe hacer el rastreador:

1. El objetivo de rastreo es una página ajax, que requiere selenium + navegador sin cabeza.

2. El cuadro de búsqueda en la página web (función opcional)

3. Botón de opción

En la página predeterminada, el tipo de información y el tiempo de selección no están todos seleccionados. Si desea rastrear todos los datos, debe cambiar estas dos opciones.

4. Seleccionar página

 

Tres, la tecnología clave

1. Página web dinámica: selenium + navegador sin cabeza

phantomjs.exe ya no está disponible, por lo que aquí se utiliza chromedriver.exe

Instale selenium, luego descargue chromedriver.exe y colóquelo en el directorio raíz de la unidad C. Puede usarlo para abrir la página web con el siguiente código

base_url = "http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist"
driver = webdriver.Chrome(executable_path=r'C:\chromedriver.exe', options=chrome_options,service_args=['--load-images=no'])
driver.get(base_url)

2. Botón de opción: find_element_by_xpath

Ver el código fuente de la página web, buscar el tipo de información

Entonces tenemos el código para hacer clic en el botón "Todos":

select_type_box = driver.find_element_by_xpath("//ul[@class='select_type_box clearfix']/li[1]")
select_type_box.click()

Del mismo modo, elija el tiempo

Seleccione el código de tiempo:

select_time_box = driver.find_element_by_xpath("//ul[@class='fl select_time_box']/li[1]")
select_time_box.click()

3. Página siguiente: onclick, análisis JS, captura del navegador

Pensé que era simple:

next_page = driver.find_element_by_xpath("//div[@class='pagination']/ul[1]/li[11]")
next_page.click()

Sin embargo, el error de ejecución: no se puede hacer clic en el elemento en el punto

En otras palabras, un navegador sin cabeza puede hacer clic fácilmente en el botón, pero no es tan fácil para un clic.

Entonces, comencé a colocar JS, F12 en el modo de depuración, puedo ver algunas cosas, este sitio web solo puede ver 3 js

Busqué un poco y no encontré la función de página, pero la función de página se encontró en el código fuente web

¡Encontré un enlace aquí! ! !

Me aventuré a adivinar que la palabra de búsqueda es un cuadro de búsqueda, así que lo probé

http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist?searchword=5G

¡Bastante seguro!

La misma idea volvió a fallar y ya no se encontraron vínculos similares.

Así que busqué información en Internet y encontré un artículo sobre la captura del navegador: https://blog.csdn.net/weixin_39610722/article/details/110960576

Primero active el seguimiento y luego haga clic en la página 4:

Busque la URL, haga clic derecho en copiar como cURL, el contenido es el siguiente:

curl 'http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist' \
  -H 'Conexión: keep-alive' \
  -H 'Cache-Control: max-age = 0' \
  -H 'Upgrade- Solicitudes inseguras: 1 '\
  -H' Origen: http://zb.yfb.qianlima.com '\
  -H' Tipo de contenido: application / x-www-form-urlencoded '\
  -H' Usuario-Agente: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 87.0.4280.141 Safari / 537.36 '\
  -H' Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, imagen / avif, imagen / webp, imagen / apng, * / *; q = 0.8, aplicación / intercambio firmado; v = b3; q = 0.9 '\
  -H' Referer: http: // zb. yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist '\
  -H' Aceptar-Idioma: zh-CN, zh; q = 0.9 '\
  -H 'Cookie: JSESSIONID = C20E9758652DE1F141E51B349D4AE839; __jsluid_h = 2b424c9697bd9692d2ad1451300a9c75; Hm_lvt_a31e80f5423f0ff316a81cf4521eaf0d = 1610549640; pageSize = 15; palabras clave =% E5% 8D% 83% E9% 87% 8C% E9% A9% AC% E6% 8B% 9B% E6% A0% 87; keywordvaluess = ""; laiyuan = 3; Hm_lvt_0a38bdb0467f2ce847386f381ff6c0e8 = 1610550267; Hm_lpvt_0a38bdb0467f2ce847386f381ff6c0e8 = 1610550267; Hm_lvt_5dc1b78c0ab996bd6536c3a37f9ceda7 = 1610550268; Hm_lpvt_5dc1b78c0ab996bd6536c3a37f9ceda7 = 1610550268; UM_distinctid = 176fc46d0a65b3-0c99d08cd43d87-31346d-e1000-176fc46d0a7d20; gr_user_id = 97220f81-4919-4a9d-a198-24b3caf49796; pageNo = 4; Hm_lpvt_a31e80f5423f0ff316a81cf4521eaf0d = 1610560460 '\
  --data-raw 'pageNo = 7 & kwname = & pageSize = 15 & ipAddress = 122.96.44.71 & searchword = & searchword2 = & hotword = & provinceId = & provinceName = & areaId = & areaName = & infoType = 0 & infoTypeName = & noticeTypes = & noticeTypesName = & secondInfoType = 5 & secondInfoTypeName = & secondInfoTypeName BF% 91% E4% B8% 80% E5% B9% B4 & searchType = 2 & clearAll = false & e_keywordid = & e_creative = & flag = 0 & source = baidu & firstTime = 1 '\
  --comprimido \
  --inseguro

Antes de que pueda echar un vistazo más de cerca, puedo decir de un vistazo que existe esa fórmula: pageNo = 4

Me aventuré a adivinar que esto es lo que estábamos buscando, probé http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist?pageNo=4 , ¡y realmente funciona!

De la misma manera, también obtenemos infoType y timeType

Por lo tanto, descubrimos que después de un análisis exhaustivo de JS, no hay necesidad de rastreadores, solo lea html en orden.

Luego descubrí que no importa lo que busque, no importa lo que filtre, solo se mostrarán 30 páginas como máximo y no se mostrarán más.

Se está gestando una nueva ronda de competencia. . .

Primero, tengo este enlace

http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist?infoType=0&timeType=0&searchword=5G&pageNo=1&pageSize=1000

Entonces pensé, tengo 1000 entradas por página, ¿por qué quiero pageNo!

http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist?infoType=0&timeType=0&searchword=5G&pageSize=1000

Si estos datos son lo suficientemente grandes, se pueden mostrar todos los resultados de la búsqueda de palabras clave y no hay límite en el número de consultas.

 

Cuatro, el código

Proyecto de reptil:

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
base_url = "http://zb.yfb.qianlima.com/yfbsemsite/mesinfo/zbpglist?infoType=0&timeType=0&searchword=5G&pageNo=1"
driver = webdriver.Chrome(executable_path=r'C:\chromedriver.exe', options=chrome_options,service_args=['--load-images=no'])
driver.get(base_url)
select_type_box = driver.find_element_by_xpath("//ul[@class='select_type_box clearfix']/li[1]")
select_type_box.click()
select_time_box = driver.find_element_by_xpath("//ul[@class='fl select_time_box']/li[1]")
select_time_box.click()
print(driver.page_source)
while True:
    next_page = driver.find_element_by_xpath("//div[@class='pagination']/ul[1]/li[11]")
    next_page.click()
    print(driver.page_source)
driver.close()

Debido a que no hay necesidad de rastrear así por el momento, el código aún no se cambiará.

Supongo que te gusta

Origin blog.csdn.net/nameofcsdn/article/details/112598545
Recomendado
Clasificación