Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo capturar el volumen de lectura de WeChat en Python

Cómo capturar el volumen de lectura de WeChat en Python

Vea los artículos de cuentas públicas de WeChat

1. Análisis de ideas

Los métodos actualmente conocidos para capturar son:

1 Capturar directamente el enlace del artículo de la cuenta pública de WeChat en la aplicación WeChat (/s?__biz=MjM5MzU4ODk2MA==. &mid =2735446906&idx=1&sn=)ec37deaba0c8ebb9badf07e5a5a3bd3&scene=0#rd)

2. A través del motor de búsqueda Sogou, socio de WeChat (/), envíe las solicitudes correspondientes para rastreo indirecto

En el primer tipo Según el método, este enlace no es fácil de obtener y sus reglas no son particularmente claras.

Entonces, en este artículo, utilizamos el método 2 ----, enviando una solicitud inmediata a weixin.sogou.com, analizando los datos capturados en tiempo real y guardándolos localmente.

II. Proceso de rastreo

1. Primera prueba en la página de búsqueda de Sogou WeChat, que puede aclarar nuestras ideas.

Uso en motores de búsqueda Utilice el "Buscador oficial". Operación "Cuenta" para el nombre en inglés de la cuenta oficial de WeChat (porque el nombre en inglés de la cuenta oficial es la única cuenta oficial y puede superponerse con el nombre chino, y el nombre de la cuenta oficial debe ser completamente correcto y puede superponerse con el Nombre chino, y puede superponerse con el nombre chino. Al mismo tiempo, el nombre de la cuenta oficial debe ser completamente correcto, de lo contrario se pueden buscar muchas cosas, siempre que encontremos el nombre, esto puede reducir nuestro filtrado. datos correspondientes al único nombre en inglés), es decir, enviar la solicitud a '/weixin?type=1&query =%s&ie=utf8&_sug_=n&_sug_type_='%? sug_type_='%? python' y analiza el enlace de salto de la página de inicio correspondiente a la cuenta pública de los resultados de búsqueda de la página.

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

Puede usar request, urllib, urllib2 o usar directamente webdriver+phantomjs, etc.

Aquí usamos request. get() Método para obtener el contenido de la página web de entrada

[python] ?view Plain?copy

#?¿Configuración del encabezado disfrazado del rastreador?

self.headers?{'User-Agent':?Mozilla/5.0(Windows?NT?6.3;?WOW64;?rv:51.0)?Gecko/20100101?Firefox/51.0'}?

#?¿Establecer la duración del tiempo de espera de la operación?

self.timeout?=?5?

#?¿Simulación completa del rastreador en request.session?

self.s?=?requests.Session()?

[python]?view Plain?copy

#Buscar en la dirección del portal la cuenta pública con la palabra clave public?

def?get_search_result_by_keywords(self):?

self.log('La dirección de búsqueda es: %s'? %?self.sogou_search_url)?

return?self.s.get(self.sogou_search_url,?headers=self.headers,?timeout=self.timeout).content?

3. Obtener la dirección de la cuenta pública

Existen muchos métodos para obtenerlos, incluidos beautifulsoup, webdriver, regular, pyquery, etc.

El método pyquery se utiliza aquí para encontrar la dirección de la entrada de la página de inicio pública

[python]?ver copia

#Obtener la página de inicio pública ¿dirección de la página?

def?get_wx_url_by_sougou_search_html(self,?sougou_search_html):?

doc?=?pq(sougou_search_html)?

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

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

# ¿Procesar el contenido de una página web a través de pyquery es similar a usar beautifulsoup, pero pyquery es similar al método de jQuery para encontrar la dirección de una página de inicio pública?

return?doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')?

4. Obtenga la lista de artículos en la página de inicio pública

Primero, debe cargar la página de inicio pública. Aquí usamos phantomjs + webdriver, porque el contenido de la página de inicio requiere renderizado y carga de JS. y el método anterior solo puede volverse estático El contenido de la página web

[python]?view Plain?

# Utilice webdriver para cargar el contenido de la página de inicio pública, principalmente el ¿Parte de renderizado JS?

def?get_selenium_js_html(self,?url):?

navegador?=?webdriver.PhantomJS()

navegador.get(url)

time.sleep(3)

#? ¿Ejecutar js para obtener el contenido completo de la página?

html?=?browser.execute_script("return?document.documentElement.outerHTML")?

return?html?

Después de obtener el contenido de la página de inicio, obtener una lista de artículos que contienen el contenido que necesitamos

[python]?view Plain?copy

#¿Obtener el contenido de los artículos públicos?

def?parse_wx_articles_by_html( self,?selenium_html):?

doc?=?pq(selenium_html)?

¿imprimir?'¿Empezando a encontrar mensaje de contenido'?

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

#¿Algunas cuentas públicas solo tienen 10 publicaciones y algunas pueden tener más?

#return?doc('div[class="weui_msg_card"]')#¿La cuenta oficial solo tiene 10 artículos?

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

6. Procesar el contenido correspondiente

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

7. Guarde el contenido del artículo

8. Guarde el contenido del artículo

9. Guarde el contenido del artículo

11. Guarde el contenido del artículo

Guárdelo localmente en formato html

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

>

8. Guarde los datos json

De esta manera, después de cada paso de división, no es particularmente difícil rastrear los artículos de la cuenta oficial.

3. Código fuente

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

[python]?view Plain?copy

#! /usr/bin/python?

#?Codificación:?utf-8?

¿importar?sys?

¿recargar(sys)?

sys.setdefaultencoding('utf-8')?

desde?urllib?import?quote?

desde?pyquery?import?PyQuery?as? pq?

¿de?selenium?import?webdriver?

¿importar?quests?

¿importar?tiempo?

¿importar?re?

¿importar?json?

¿importar?os?

clase?weixin_spider:?

def?

'?¿Constructor?

self.kw?=?kw?

#?Enlace de búsqueda de Sohu WeChat?

#self.sogou_search_url?=?/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_='?%?quote(self.kw)?

self.sogou_search_url? =?'?/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_='?%?quote(self.kw)?

#?¿Disfraz de rastreador?

self.headers?{'User-Agent':?Mozilla/5.0(Windows?NT?10.0;?WOW64;?rv:47.0)?Gecko/20100101?FirePHP/0refox/47.0?FirePHP/ 0.7.4.1'}?

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

self.timeout?=?5?

self.s?=?requests.Session()?

def?get_search_result_by_kw(self):?

self.log('¿La dirección de búsqueda es: %s'? %?self.sogou_search_url)?

return?self.s.get(self.sogou_search_url,?headers=self. headers,?timeout=self.timeout).content?

def?get_wx_url_by_sougou_search_html(self,?sougou_search_html):?

'?Obtenga el enlace a la página de inicio pública según el resultado devuelto sougou_search_html?

doc?=?pq(sougou_search_html)?

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

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

# Procesar páginas web a través de contenido de pyquery, similar al uso de beautifulsoup, pero pyquery es similar a jQuery Buscar público

¿Método de dirección de la página de inicio?

return?doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')?

def?get_selenium_js_html(self,?wx_url):?

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

navegador?=?webdriver.PhantomJS()

navegador.get(wx_url)

tiempo.sleep(3)

#?Ejecutar JS para obtener el dom completo

html?=?browser.execute_script("return?document.documentElement.outerHTML")?

return.html

def.parse_wx_articles_by_html(self,?selenium_html):?

'?¿Analizar wx_articles_by_html desde selenium_html?

doc?=?pq(selenium_html)?

return?doc('div[class="weui_msg_card"]')?

def?switch_arctiles_too_list( self,?artículos):?

'?¿Convertir artículos a diccionario de datos? ?

lista_artículos?[]?

i=?

for?

self.log(u'Iniciando integración (%d /%d)'?(i,?len(artículos)))?

articles_list.append(self.parse_one_article(artículo))?

i +=?1

# break

return artículos_list

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

' ?¿Analizar un artículo?

article_dict?=?{}?

article?=?article('.weui_media_box[id]')?

title?=?article(' h4[class="weui_media_title"]').text()?

self.log('¿El título es: ? %s'? %?title)?

¿url?? +?article('h4[class="weui_media_title"]').attr('hrefs')?

self.log('La dirección es: ? %s'? %?url)? p>

summary?=?article('.weui_media_desc').text()?

self.log('Resumen del artículo: ? %s'? %?summary)?

fecha?=?article('.weui_media_extra_info').text()?

self.log('Publicado en: ?)

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

contenido?=?self.parse_content_by_url(url).html(

)?

contentfiletitle=self.kw+'/'+título+'_'+fecha+'.html'?

self.save_content_file(contentfiletitle,content)?

return{?

'título':?

'url':?url,?

'resumen':?resumen,?

'fecha':?fecha,?

'pic':?pic,?

'content':?content?

}?

def?parse_cover_pic(self,?article):?

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