Red de Respuestas Legales - Derecho empresarial - ¿Cómo captura Python la lectura de WeChat?

¿Cómo captura Python la lectura de WeChat?

Artículos sobre cómo obtener la cuenta oficial de WeChat

1. Análisis de pensamiento

Las formas actuales de obtenerla son:

1. Obtenga WeChat directamente en el enlace de la aplicación WeChat. al artículo en la cuenta oficial de WeChat (/s?_ _ biz = mjm 5 mzu 4 odk 2ma = = amp; mid=2735446906. idx=1. sn = ECE 37 deaba 0 c 8 ebb 9 badf 07 e 5a 3 BD 3 amp ;Scenario=0#rd)

2. Envíe la solicitud correspondiente a través del motor de búsqueda Sogou del socio de WeChat (/) para rastrear indirectamente.

En el Método 1, este tipo de vínculo no es fácil de obtener y sus reglas no son particularmente claras.

Por lo tanto, este artículo adopta el método 2: analizar los datos capturados en tiempo real enviando una solicitud instantánea a weixin.sogou.com y guardándola localmente.

2. Proceso de rastreo

1. Primero, probémoslo en la página de búsqueda de WeChat de Sogou, lo que aclarará nuestras ideas.

Utilice el nombre en inglés de la cuenta oficial de WeChat en el motor de búsqueda "Buscar cuenta oficial de WeChat" (porque el nombre en inglés de la cuenta oficial de WeChat es único entre las cuentas oficiales de WeChat y el nombre en chino puede ser Repetido, WeChat El nombre de la cuenta oficial debe ser completamente correcto; de lo contrario, se pueden encontrar muchas cosas, lo que puede reducir el trabajo de detección de datos (solo necesita encontrar los datos correspondientes a este nombre único en inglés), es decir, enviar. una solicitud a '/weixin? tipo = 1 amp; consulta = s ampie = utf8 amp_ sug _ = n amp_sug_type_= '? Python ', y analiza el enlace de salto de la página de inicio correspondiente a los resultados de búsqueda de la cuenta oficial de WeChat desde la página.

2. Obtenga el contenido de la entrada de la página de inicio

Utilice request, urllib, urllib2 o utilice directamente webdriver phantomjs, etc.

Aquí se utiliza el método request.get() para obtener el contenido de la página del portal.

¿[pitón]? ¿Mirando la llanura? Copiar

#?Dispositivo de cabeza de camuflaje sobre orugas

self.headers? =?{ 'Agente de usuario':? ¿Mozilla/5.0? (¿Windows?NT?6.3;?WOW64?rv:51.0)? Geco/20100101? Firefox/51.0'}

#?Establezca el tiempo de espera de la operación.

auto. ¿Tiempo de espera? =?五

#?La simulación del rastreador se completa en request.session

self.s? =?Solicitud. Sesión()

[python]? ¿Mirando la llanura? Copiar

# ¿Buscar la dirección de entrada y buscar en la cuenta oficial de WeChat usando public como palabra clave?

¿definitivamente? get_search_result_by_keywords(self):

Self.log('Dirección de búsqueda: s '??self.sogou_search_url)

¿Regresión? self.s.get(self. Sogou_search_URL,? headers=self.headers,? timeout=self.timeout). Contenido

El tercer paso es obtener la dirección oficial de la cuenta WeChat.

Hay muchas formas de obtener la dirección de la página de inicio de la cuenta oficial de WeChat a partir del contenido de la página web obtenida, como beautifulsoup, webdriver, uso directo de Regularity, pyquery, etc.

Aquí usamos pyquery para encontrar la dirección de entrada de la página de inicio de la cuenta oficial de WeChat.

¿[pitón]? ¿Mirando la llanura? Copiar

#Obtener la dirección de la página de inicio de la cuenta oficial de WeChat

def? get_wx_URL_by_sou Gou_search_html(self, sougou_search_html):

Doctor. =?pq(search_search_html)

#Imprimir? doc('p[class="tit"]')('a '). Atributo(' href ')

#Imprimir? doc('div[class=img-box]')('a '). Atributo ('href')

#Usar pyquery para procesar el contenido de la página web es similar a usar beautifulsoup, pero los métodos de pyquery y jQuery son similares. Encuentre la dirección de la página de inicio de la cuenta oficial de WeChat.

¿Volver? doc(' div[clase = txt-box]')(' p[clase = tit]')(' a '). Atributo ('href')

4. Obtenga la lista de artículos en la página de inicio de la cuenta oficial de WeChat.

Primero debes cargar la página de inicio de la cuenta oficial de WeChat. Aquí se utiliza el controlador web phantomjs, porque el contenido de esta página de inicio requiere renderizado y carga js, y el método anterior solo puede obtener contenido web estático.

¿[pitón]? ¿Mirando la llanura? Copiar

#¿Usar webdriver? Cargue el contenido de la página de inicio de la cuenta oficial de WeChat, principalmente la parte de representación js.

¿definitivamente? get_selenium_js_html(self,? URL):

¿Navegador? =?controlador web. ¿PhantomJS()?

browser.get(sitio web)?

tiempo.dormir(3)?

#?Ejecute js para obtener el contenido completo de la página.

html? =?browser.execute_script("return?document . elemento del documento . html externo ")

¿Regresar? Lenguaje de marcado de hipertexto

Después de obtener el contenido de la página de inicio, obtenemos la lista de artículos, que contiene el contenido que necesitamos.

¿[pitón]? ¿Mirando la llanura? Copiar

#Obtener el contenido del artículo de la cuenta oficial de WeChat

def? parse_wx_articles_by_html(self,?selenium_html):

Dr. =?pq(selenio html)

¿Imprimir? "Empieza a buscar contenido nuevo"

¿Volver? doc('div[class="weui_media_box?appmsg"]')

#Algunas cuentas oficiales de WeChat solo tienen 10 y algunas pueden tener más.

¿#Volver? doc(' div[class = " WEUI _ MSG _ CARD "]')#Solo hay 10 cuentas oficiales de WeChat.

5. Analizar cada lista de artículos para obtener la información que necesitamos.

6. Procesar el contenido correspondiente

Incluyendo el nombre del artículo, dirección, introducción, hora de publicación, etc.

7. Guardar el contenido del artículo

Guárdalo localmente en formato html.

Al mismo tiempo, guarda el contenido del paso anterior en formato excel.

8. Guarde los datos json

De esta manera, después de dividir cada paso, no es particularmente difícil obtener los artículos de la cuenta oficial de WeChat.

En tercer lugar, código fuente

El código fuente de la primera versión es el siguiente:

[python]? ¿Mirando la llanura? Copiar

#!/usr/bin/python

#?Codificación:? utf-8

¿Importar? [Cálculo] Comando de copia del sistema (abreviatura de sistema)

Recargar (sistema)

sys.setdefaultencoding('utf-8 ')

¿Dónde? URLlib? ¿importar? Cita

¿De dónde? ¿piquería? ¿importar? ¿PyQuery? ¿Como? Cociente Físico

¿De dónde viene? ¿selenio? ¿importar? Controlador de red

¿Importar? Requerido

¿Importar? Hora

¿Importar? Acerca de

¿Importar? json

¿Importar? Sistema Operativo (Sistema Operativo)

¿Clase? WeChat_Spider:

¿def? __init__(self, kilovatio):

? "Constructor",

self.kw? =?kW

#?Enlace de búsqueda de Sohu WeChat

#self.sogou_search_url? =?/Prestigio? tipo = 1 amp; consulta = s ampie = utf8 amp_ sug _ = n amp_sug_type_= '? ?Cotización (auto kilovatio)

self.sogou_search_url? =?/Prestigio? tipo = 1 amp; consulta = s ampie = utf8 amp entrada amp = n amp_sug_type_= '? ?quote(selfkW)

#?camuflaje-reptiliano

self.headers? =?{ 'Agente de usuario':? ¿Mozilla/5.0? (¿Windows?NT?10.0;?WOW64?rv:47.0)? Geco/20100101? ¿FirePHP/0refox/47.0? FirePHP/0.7.4.1'}

#?Duración del tiempo de espera de la operación

self .Timeout? =?五

auto.s? =?Solicitud. sesión()

def? get_search_result_by_kw(self):

Self.log('Dirección de búsqueda: s '??self.sogou_search_url)

¿Volver? self.s.get(self. Sogou_search_URL,? headers=self.headers,? timeout=self.timeout). Contenido

def? get_wx_URL_by_sou Gou_search_html(self,sougou_search_html):

? 'Según el sougou_search_html devuelto, ¿obtener el enlace a la página de inicio de la cuenta oficial de WeChat? '

Médico. =?pq(search_search_html)

#Imprimir? doc('p[class="tit"]')('a '). Atributo(' href ')

#Imprimir? doc('div[class=img-box]')('a '). Atributo ('href')

#Usar pyquery para procesar el contenido de la página web es similar a usar beautifulsoup, pero los métodos de pyquery y jQuery son similares. Encuentre la dirección de la página de inicio de la cuenta oficial de WeChat.

¿Volver? doc(' div[clase = txt-box]')(' p[clase = tit]')(' a '). Atributo(' href ')

def? get_selenium_js_html(self,?wx_url):

? '¿Ejecutar js para renderizar el contenido y devolver el contenido html renderizado? '

¿Navegador? =?controlador web. ¿PhantomJS()?

navegador.get(wx_url)?

tiempo.dormir(3)?

#?¿Ejecutar js para obtener el dom completo?

html? =?browser.execute_script("return?document . elemento del documento . html externo ")

¿Regresar? Lenguaje de marcado de hipertexto

def? parse_wx_articles_by_html(self,?selenium_html):

? '¿Analizar los artículos de la cuenta oficial de WeChat WeChat desde selenium_html? '

Médico. =?pq(selenium html)

¿Regresión? doc(' div[class = " weui _ msg _ card "]')

def? cambiar _ artículos _ a _ lista(self, artículos):

? ¿Convertir artículo a diccionario de datos?

¿Lista_artículo? =?[]

¿Yo? =?1

¿Y si? Artículo:

¿Para qué? ¿artículo? ¿existir? items.items():

self log(u 'iniciar integración( d/ d)'??(i,?len(article)))

articles_list. self . analizar _ un _ artículo(artículo))

¿Yo? =?1

#?Roto

¿Devolver? Lista_artículo

def? parse_one_article(self,?artículo):

? ¿Analizar un artículo?

¿Artículo_Diccionario? =?{}

¿Artículo? =?Artículo('.weui_media_box[id]')

¿Título? =?Artículo(' h4[class="weui_media_title"]'). Text()

Self.log('El título es:? "s"?? Título)

¿URL? =?''? ?Artículo(' h4[class="weui_media_title"]'). Propiedades(' hrefs ')

Self.log('Dirección:? "s"?? URL)

¿Resumen? =?Artículo('.descMediaAssociation). text()

Self.log('Introducción al artículo:? "s"?? Resumen)

¿Fecha? =?Artículo('.weui_media_extra_info'). text()

Self.log('Publicado el:? "s"?? Fecha)

pic? =?self.parse_cover_pic(artículo)

¿Contenido? =?self.parse_content_by_url(url).

html()

título del archivo de contenido = self .kw '/' título ' _ ' fecha '. ' html '

self.save_content_file(título del archivo de contenido, contenido)

¿Regresión? {

Título': título,

Sitio web': url,

Resumen': resumen,

Fecha': fecha,

pic ':pic,

contenido':content

}

def? parse_cover_pic(self,?artículo):

? '¿Analizar la imagen de portada del artículo? '

¿foto? =?Artículo('.weui_media_HD'). Propiedad('estilo')

p? =?recompile(r'imagen-de-fondo:url(.)')

rs? =?p.findall(imagen)

self.log(?La imagen de portada es: s???rs[0]?if?len(rs)?gt?0?"de lo contrario,")

¿Regresar? rs[0]? ¿si? len(res)? ¿gt? 0? ¿Y si? ''

¿definición? parse_content_by_url(self, url):

? "¿Conoce los detalles del artículo?"

page_html? =?self.get_selenium_js_html(URL)

¿Regresión? pq(page_html)('#js_content ')

def? save_content_file(self, título, contenido):

? '¿Escribir el contenido de la página en el archivo? '

¿Qué usar? abierto(título, ?w’)? ¿Como? Mujer:

f.write(content)

def? save_file(self, contenido):

? '¿Escribir datos en el archivo? '

¿Qué usar? open(self.kw '/' self.kw '.'txt',?w')? ¿Como? Mujer:

f.write(content)

def? Iniciar sesión(self,?msg):

? "¿Función de registro personalizada?"

¿Imprimir? u"s:?"s"??(time.strftime('Y-m-d?H:M:S'),?msg)

def ?require_validate(self, selenium_html):

p >

? A veces la otra parte bloqueará la IP. Aquí hacemos un juicio para verificar si el html contiene la etiqueta id=verify_change. ?pq(selenium_html)(' # verificar_cambio ').text()?!=?''

def?create_dir(self):

'Crear carpeta'

¿Qué pasa si? os.path.exists(self.kw):

os.makedirs(self.kw)?

def?run(self):

? "¿Función de entrada del rastreador?" ”

#Paso?0?: Crea una carpeta con el nombre de la cuenta oficial de WeChat.

self.create_dir()

#?Paso?1: Para Obtenga una solicitud al motor Sogou WeChat y utilice el nombre en inglés de la cuenta oficial de WeChat como palabra clave de consulta.

Self.log(u 'Empiece a recibir, el nombre en inglés de la cuenta oficial de WeChat es: s '??self.kw)

Self.log(u 'Empiece a llamar a la búsqueda de Sogou motor ')

sougou_search_html? =?self.get_search_result_by_kw()

#?¿Un paso? 2. Analice el enlace de la página de inicio de la cuenta oficial de WeChat desde la página de resultados de búsqueda.

Self.log(u 'Sougou_search_html obtenido con éxito, comenzó a capturar la página de inicio wx_url correspondiente a la cuenta oficial de WeChat').

wx_url? =?self . get _ wx _ URL _ by _ Sogou _ search _ html(Sogou _ search _ html)

Self.log(u 'Wx_url obtenido con éxito, s '??wx_url)

#?¿Un paso? 3: 3: Selenium PhantomJs para obtener Js cargados de forma asíncrona en HTML renderizado.

Self.log(u 'Comenzar a llamar a selenium para renderizar html')

¿Selenium_html? =?self . get _ selenium _ js _ html(wx _ URL)

#?¿Un paso? 4: Detecta si el sitio web de destino está bloqueado.

¿Y si? self.need_verify(selenium_html):

Self.log(el sitio web de destino bloquea tu rastreador, inténtalo de nuevo más tarde)

De lo contrario:

# ?¿paso? 5: Usando PyQuery, ¿desde el paso? 3. Analice los datos de la lista de artículos de la cuenta oficial de WeChat a partir del HTML obtenido.

Self.log(u 'Llame a selenium para representar html y comenzar a analizar los artículos de la cuenta oficial de WeChat).

¿Artículo? =?self . parse _ wx _ items _ by _ html (selenium _ html)

Self.log (¿tienes artículos de WeChat)? ?len(artículo))

#?¿Un paso? 6:? ¿Encapsular los datos de los artículos de WeChat en una lista de diccionario?

Self.log(u 'Comenzar a integrar los datos de los artículos de WeChat en un diccionario')

¿Article_list? =?self.switch _ arctiles _ to _ list(artículo)

#?¿Un paso? 7:?¿Dejar ir? La lista de 5 diccionarios se convierte a Json

Self.log(u 'Integración completada, inicia conversión a json')

data_json? =?json.dumps(articles_list)

#?¿Un paso? 8:? Escribir archivo

Self.log (u 'Convertir a json, datos json guardados en un archivo').

self.save_file

Self.log(u 'Guardado completado, el programa finaliza')

#?Main

¿Si? __nombre__? ==?__main__ ':

Gongzhonghao=raw_input(u 'Ingrese a la cuenta oficial de WeChat para rastrear').

¿Y si? ¿No? Gong Zhonghao:

Cuenta pública='python6359'

weixin_spider (Gong Zhonghao).

Ejecutar ()

La segunda versión del código:

El código ha sido optimizado y rectificado, principalmente:

1. Se agregó almacenamiento de Excel.

2. Modificar las reglas de obtención del contenido de los artículos.

3. Notas enriquecidas

Este programa tiene un defecto conocido: si el artículo de la cuenta oficial de WeChat contiene un vídeo, se puede informar de un error.

¿[pitón]? ¿Mirando la llanura? Copiar

#!/usr/bin/python

#?Codificación:? utf-8