Python rastrea los datos de noticias de Baidu y Python rastrea el contenido del sitio web de noticias

Hola a todos, este artículo se centrará en el rastreo de Python de datos de noticias de Baidu. El rastreo de contenido de sitios web de noticias de Python es algo que mucha gente quiere entender. Para descubrir el contenido del artículo de rastreo de Python, primero debe comprender lo siguiente.

Python rastrea información de noticias, estadísticas de segmentación de palabras y dibuja nubes de palabras

Chinanews.com es un conocido portal de noticias chino y uno de los proveedores de contenido original de noticias chinas más importantes en Internet global. Confiando en la red global de edición y edición de la Agencia de Noticias de China, proporciona texto, imágenes, videos y otros servicios de información diversificados de manera rápida y precisa a los internautas y los medios de la red las 24 horas del día .


Analice el contenido de la página : Primero, abra la página de China News Network y podrá ver que ya hay muchas opciones de etiquetas de categorías en la barra de navegación. Sin embargo, no todas las etiquetas a las que se puede saltar están clasificadas según el contenido de la noticia.
Barra de navegación de inicio
Por ejemplo, "Finanzas", "Automóviles" y "Deportes" en las pestañas están divididos por contenido, pero "Internacional", "Hong Kong Macao" y "Taiwán" están divididos por la fuente de la noticia. Estas divisiones no son uniformes.

Para clasificar las noticias según su contenido, es necesario extraer el contenido de las noticias publicadas en tiempo real y dividirlo uniformemente según la información semántica del texto.

desplazarse por la página de noticias
Aquí, se encuentra que en la columna de China News Network 滚动新闻, se puede ver un resumen de las últimas noticias publicadas en tiempo real. Y las etiquetas de categorías de noticias y los títulos de noticias publicados en tiempo real se pueden obtener en la página web . Después de hacer clic en el enlace, puede ir a la página de detalles correspondiente para obtener un texto de contenido más detallado.
Por ejemplo:

Ejemplo de una página de detalles de noticias

Analice el código fuente de la página web : puede ver el contenido de los encabezados en el código fuente de la página de noticias en desplazamiento . Agregarlo al rastreador como encabezado de solicitud puede simular que un navegador accede a un sitio web.
Encabezados para desplazarse por las páginas de noticias
Imprima el código fuente de la página web obtenido en el terminal. Se puede observar que el título y etiqueta de la noticia se pueden obtener del código fuente.

salida terminal
Sin embargo, lo que se obtiene en este paso respsigue siendo una cadena. Para facilitar el análisis del contenido de la página web, es necesario convertir la cadena en datos estructurados de la página web, para encontrar fácilmente las etiquetas HTML y sus atributos y contenido.

Observe la estructura HTML de la página web y convierta la cadena de formato HTML obtenida en el paso anterior en un objeto BeautifulSoup. De esta forma, el contenido correspondiente se puede encontrar a través de etiquetas.
Análisis de código fuente

Detección y almacenamiento de información : A continuación, debemos filtrar el contenido que necesitamos en la página web.
Tenga en cuenta que la información de la página web se muestra en tres secciones según el nombre de la categoría , el título y la hora , y el contenido al que se accede también se divide en estas tres partes.
Análisis del contenido de las noticias.
Utilice expresiones regulares para hacer coincidir las cadenas obtenidas. Podemos obtener un y
poner la información obtenida en el texto.

Al desplazarse por la página se puede pasar la página, al rastrear un total de 10 páginas de información se obtendrán 1250 noticias. Coloque esta información de noticias en el diccionario y guárdela en formato Excel.
almacenar información de noticias
Al notar que diferentes categorías de noticias tendrán números diferentes, contaremos las etiquetas de las noticias con diferentes contenidos rastreadas de la siguiente manera: Puede ver que el número de comunicados de prensa
número de etiquetas diferentes
en los que " doméstico ", " finanzas " y " sociedad " son los principales. sujetos más. También hay muchos contenidos que se publican muy raramente, como "IT", "Militar".

Al mismo tiempo, se integran los contenidos de todos los titulares de noticias. Utilice la biblioteca jieba para la segmentación de palabras y utilice la biblioteca de nube de palabras para dibujar una visualización de nube de palabras:
nube de palabras

Se puede observar que la palabra " China " aparece con mayor frecuencia en los titulares de las noticias, seguida de "internacional", "desarrollo", etc.

import requests
from bs4 import BeautifulSoup
import re

import xlwt

import jieba
import wordcloud

def req():
    url_head = "http://www.chinanews.com/scroll-news/"
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
    }

    all_news = []
    news_list = [[] for i in range(20)]
    id2tp = { }
    id = {}
    cnt = 0
    txt = " "
    for i in range(10):
        url = url_head + "news" + str(i+1) + ".html"
        resp = requests.get(url=url, headers=headers) 
        resp = resp.content.decode('utf-8', 'ignore') # 不加第二个参数ignore会报错 忽略掉一些utf编码范围外的不知名字符
        #print(resp)
        
        soup = BeautifulSoup(resp, 'html.parser')
        
        news = soup.select('body #content #content_right .content_list ul li')
        #print(news)
        for new in news:
            new = new.text
            if new == '': 
                continue

            ti = re.compile("[0-9][0-9]:[0-9][0-9]")
            date = re.compile("[0-9]{1,2}\-[0-9]{1,2}")
            #print(new)
            time = new[-10:]
            new = ti.sub('', new)
            new = date.sub('', new)
            lm = new[1:3]
            
            if len(lm.strip()) == 1:
                lm = "IT"
            bt = new.split(']')[1].replace(' ', '')
            txt = txt + " " + bt
            if lm not in id.keys():
                id[lm] = cnt
                id2tp[cnt] = lm
                cnt += 1
            all_news.append({
                "lm": lm,
                "bt": bt,
                "time": time
            })
    print(len(all_news))
    print(id)
    #print(id2tp)
    workbook = xlwt.Workbook() #注意Workbook的开头W要大写
    
    sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)

    sheet1.write(0, 0, "lm")
    sheet1.write(0, 2, "bt")
    sheet1.write(0, 4, "time")
    for idx, dictionary in enumerate(all_news):
        news_list[id[dictionary["lm"]]].append(dictionary["bt"])
        sheet1.write(idx + 1, 0, dictionary["lm"])
        sheet1.write(idx + 1, 2, dictionary["bt"])
        sheet1.write(idx + 1, 4, dictionary["time"])
    workbook.save('news.xls')

    for i in range(13):
        print(id2tp[i], len(news_list[i]))

    w=wordcloud.WordCloud(width=1000, font_path='chinese.ttf', height=700, background_color='white')
    lis = jieba.lcut(txt)
    # 人为设置一些停用词
    string = " ".join(lis).replace('的', '').replace('在', '').replace('为', '').replace('是', '').replace('有', '').replace('和', '')
    print(string)
    w.generate(string)
    w.to_file("news.png")

if __name__ == "__main__":
    
    req()
    # test()
    

Supongo que te gusta

Origin blog.csdn.net/mynote/article/details/132611994
Recomendado
Clasificación