Escalando la lista TOP250 de películas de Douban

1. Diseño de rastreador web temático de red temática

1. Nombre del reptil: 250 datos principales de la película Douban

2. Rastrear contenido: Rastrear clasificaciones de películas, calificaciones, introducción

3. Descripción general del esquema de diseño del rastreador web:

Idea: Al analizar el código fuente de la página web, encuentre la etiqueta donde se encuentran los datos, lea los datos a través del rastreador y guárdelos en el archivo csv, lea el archivo, limpie y procese los datos, el análisis de datos y la visualización.

Dificultades técnicas: muy pocos datos y conocimiento insuficiente.

 

2. Análisis de las características estructurales de la página temática.

1. La estructura y el análisis de características de la página del tema: los datos de rastreo se distribuyen en la etiqueta '<ol class = "grid_view">', la etiqueta del nombre de la película es 'span.title', la etiqueta de calificación es 'span.rating_num', la etiqueta de introducción Es 'span.inq'.

2.Análisis de la página HTML:

 

Tres, programación de rastreadores web

1. Rastreo y recopilación de datos:

importar solicitudes
de bs4 importar BeautifulSoup
importar pandas como pd
de sklearn.linear_model importar LinearRegression
importar seaborn como sns
importar numpy como np
importar matplotlib.pyplot como plt
importar matplotlib
de scipy.optimize import leastsq

def get_html (url):
encabezados = {'user-agent': 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 70.0.3538.102 Safari / 537.36 Edge / 18.18362'} # 伪装 爬虫
resp = request.get (url, headers = headers)
return resp.text

url = 'https://movie.douban.com/top250'
html = get_html (url)
soup = BeautifulSoup (html, 'html.parser')


a = soup.find_all ('div', class _ = 'hd')
# 电影 名
film_name = []
para i en a:
film_name.append (iaspan.text)

#
评分 rating_score = soup.find_all ('span', class _ = 'rating_num')

lt = []
num = 20
para i en rango (num):
lt.append ([i + 1, film_name [i], rating_score [i] .string])
df = pd.DataFrame (lt, columnas = ['rango ',' Nombre de la película ',' Calificación '])
df.to_csv (' 豆豆 电影 数据 .csv ') #Guarde el archivo, los datos son persistentes

 

2. Limpie y procese los datos:


# Leer el archivo csv df = pd.DataFrame (pd.read_csv ('Douban movie
data.csv ')) #print (df)
df.head ()

# Verificar valores duplicados

df.duplicated ()

 

 


# Procesamiento de valor vacío df.isnull (). Sum () # devuelve 0, lo que indica que no hay valor nulo

 

 # Manejo de valor perdido

df [df.isnull (). values ​​== True] #Return sin valores faltantes

 

 


#Utilice el comando describe () para mostrar indicadores estadísticos descriptivos df.describe ()

 

 3. Análisis y visualización de datos:

X = df.drop ("nombre de la película", eje = 1) predic_model = LinearRegression (
)
predict_model.fit (X, df ['score'])
print ("El coeficiente de regresión es:", predict_model.coef_)

 


# Dibuje un gráfico de regresión de clasificación y puntuación plt.rcParams ['font.sans-serif'] = ['STSong'] # Muestra chino
sns.regplot (df. Ranking, df. Scoring)

 

# Dibuje un diagrama de dispersión
def Scatter_point ():

plt.scatter (df. Ranking, df. Score, color = 'red', s = 25, marker = "o")
plt.xlabel ("ranking")
plt.ylabel ( "Rating"
plt.title ( " Gráfico de dispersión de clasificación y calificación")
plt.show ()

Scatter_point ()

 

 

# Dibuje un histograma vertical
plt.rcParams ['axes.unicode_minus'] = False # Se usa para mostrar el signo negativo
plt.bar (df. Ranking, df. Score, label = "ranking y score histogram")
plt.show ( )

 


#Dibujar clasificación y gráfico de cuadro de puntuación def draw1 ():

plt.figure (figsize = (10, 6))
plt.title ('Clasificación de dibujo y gráfico de cuadro de puntuación')
sns.boxplot (x = 'rank', y = 'Puntuación', datos = df)

draw1 ()

 


# Dibuje parte del gráfico de distribución sns.jointplot (x = "rank", y = 'score', data = df, kind = 'reg')

# Dibuje la ecuación de regresión única unaria
def main ():

colnames = ["rank", "nombre de la película", "score"]
df = pd.read_csv ('Douban movie data.csv', skiprows = 1, names = colnames)
X = clasificación df
Y = calificación df

def func (p, x):
k, b = p
return k * x + b

def error_func (p, x, y):
return func (p, x) -y
p0 = [ 0,0]

Para = leastsq (error_func, p0, args = (X, Y))
k, b = Para [0]
print ("k =", k, "b =", b)

plt.figure (figsize = (10,6))
plt.scatter (X, Y, color = "verde", etiqueta = u "distribución de puntaje", ancho de línea = 2)
x = np.linspace (0,30,20)
y = k * x + b
plt.plot (x, y, color = "rojo", etiqueta = u "ecuación de regresión línea recta", ancho de línea = 2)

plt.title ("Relación de clasificación y calificación de películas")
plt.xlabel ('Clasificación')
plt.ylabel ('Calificación')
plt.legend ()
plt.show ()

main ()

 

# Dibuje la ecuación de regresión cuadrática unaria
def one ():

colnames = ["rank", "nombre de la película", "score"]
df = pd.read_csv ('Douban movie data.csv', skiprows = 1, names = colnames)
X = df. Clasificación
Y = df. Clasificación

def func (p, x):
a, b, c = p
devuelve a * x * x + b * x + c

def error_func (p, x, y):
return func (p, x) -y

p0 = [0,0,0]
Para = leastsq (error_func, p0, args = (X, Y))
a, b, c = Para [0]
plt.figure (figsize = (10,6))
plt.scatter (X, Y, color = "verde", etiqueta = u "distribución de puntaje", ancho de línea = 2)

x = np.linspace (0, 30,20)
y = a * x * x + b * x + c
plt.plot (x, y, color = "rojo", etiqueta = u "ajustar línea recta", ancho de línea = 2)
plt.title ("Película Diagrama de clasificación y puntuación de la ecuación de regresión cuadrática unaria ")
plt.legend ()
plt.show ()

one ()

 

 5. Resuma los códigos de las partes anteriores y adjunte el código completo del programa:

 

importar solicitudes
de bs4 importar BeautifulSoup
importar pandas como pd
de sklearn.linear_model importar LinearRegression
importar seaborn como sns
importar numpy como np
importar matplotlib.pyplot como plt
importar matplotlib
de scipy.optimize import leastsq

def get_html (url):
encabezados = {'user-agent': 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 70.0.3538.102 Safari / 537.36 Edge / 18.18362'} # 伪装 爬虫
resp = request.get (url, headers = headers)
return resp.text

url = 'https://movie.douban.com/top250'
html = get_html (url)
soup = BeautifulSoup (html, 'html.parser')


a = soup.find_all ('div', class _ = 'hd')
# 电影 名
film_name = []
para i en a:
film_name.append (iaspan.text)

#
评分 rating_score = soup.find_all ('span', class _ = 'rating_num')

lt = []
num = 20
para i en rango (num):
lt.append ([i + 1, film_name [i], rating_score [i] .string])
df = pd.DataFrame (lt, columnas = ['rango ',' Nombre de la película ',' Calificación '])
df.to_csv (' 豆豆 电影 数据 .csv ' ) #Guardar archivo, persistencia de datos

# Leer archivo csv
df = pd.DataFrame (pd.read_csv (' Datos de película de Douban .csv '))
#print (df)
df.head ()



# Compruebe si hay valores duplicados df.duplicated ()


# Procesamiento de valor vacío df.isnull (). Sum () # devuelve 0, lo que indica que no hay valor nulo


# Procesamiento de valores perdidos df [df.isnull (). Valores == Verdadero] # Devolver sin valores faltantes


#Utilice el comando describe () para mostrar indicadores estadísticos descriptivos df.describe ()


# Análisis de datos X = df.drop ("nombre de película", eje = 1) predic_model = LinearRegression (
)
predict_model.fit (X, df ['score'])
print ("El coeficiente de regresión es:", predict_model.coef_)



# Dibuje un gráfico de regresión de clasificación y puntuación plt.rcParams ['font.sans-serif'] = ['STSong'] # Muestra chino
sns.regplot (df. Ranking, df. Scoring)

# Dibuje un diagrama de dispersión
def Scatter_point ():

plt.scatter (df. Ranking, df. Score, color = 'red', s = 25, marker = "o")
plt.xlabel ("ranking")
plt.ylabel ( "Rating"
plt.title ( " Gráfico de dispersión de clasificación y calificación")
plt.show ()

Scatter_point ()

# Dibuje un histograma vertical
plt.rcParams ['axes.unicode_minus'] = False # Se usa para mostrar el signo negativo
plt.bar (df. Ranking, df. Score, label = "ranking y score histogram")
plt.show ( )


#Dibujar clasificación y gráfico de cuadro de puntuación def draw1 ():

plt.figure (figsize = (10, 6))
plt.title ('Clasificación de dibujo y gráfico de cuadro de puntuación')
sns.boxplot (x = 'rank', y = 'Puntuación', datos = df)

draw1 ()


# Dibuje un gráfico de distribución sns.jointplot (x = "rank", y = 'score', data = df, kind = 'reg')

# Dibuje la ecuación de regresión única unaria
def main ():

colnames = ["rank", "nombre de la película", "score"]
df = pd.read_csv ('Douban movie data.csv', skiprows = 1, names = colnames)
X = clasificación df
Y = calificación df

def func (p, x):
k, b = p
return k * x + b

def error_func (p, x, y):
return func (p, x) -y
p0 = [ 0,0]

Para = leastsq (error_func, p0, args = (X, Y))
k, b = Para [0]
print ("k =", k, "b =", b)

plt.figure (figsize = (10,6))
plt.scatter (X, Y, color = "verde", etiqueta = u "distribución de puntaje", ancho de línea = 2)
x = np.linspace (0,30,20)
y = k * x + b
plt.plot (x, y, color = "rojo", etiqueta = u "ecuación de regresión línea recta", ancho de línea = 2)

plt.title ("Relación de clasificación y calificación de películas")
plt.xlabel ('Clasificación')
plt.ylabel ('Calificación')
plt.legend ()
plt.show ()

main ()


# Dibuje la ecuación de regresión cuadrática unaria
def one ():

colnames = ["rank", "nombre de la película", "score"]
df = pd.read_csv ('Douban movie data.csv', skiprows = 1, names = colnames)
X = df. Clasificación
Y = df. Clasificación

def func (p, x):
a, b, c = p
devuelve a * x * x + b * x + c

def error_func (p, x, y):
return func (p, x) -y

p0 = [0,0,0]
Para = leastsq (error_func, p0, args = (X, Y))
a, b, c = Para [0]
plt.figure (figsize = (10,6))
plt.scatter (X, Y, color = "verde", etiqueta = u "distribución de puntaje", ancho de línea = 2)

x = np.linspace (0, 30,20)
y = a * x * x + b * x + c
plt.plot (x, y, color = "rojo", etiqueta = u "ajustar línea recta", ancho de línea = 2)
plt.title ("Película Diagrama de clasificación y puntuación de la ecuación de regresión cuadrática unaria ")
plt.legend ()
plt.show ()

one ()

4. Conclusión

1.1 Después de analizar y visualizar los datos del tema, ¿qué conclusiones se pueden sacar?

A través del análisis y la visualización de los datos del sujeto en esta tarea, me di cuenta profundamente del recorrido de la visualización de datos.A través del análisis y la visualización de datos, los datos abstractos se convierten en imágenes concretas, lo que facilita nuestra comprensión.

2. Haga un resumen simple de la finalización de esta tarea de diseño del programa: a través de esta tarea, entiendo el análisis y la visualización de datos, dominé el uso de muchas bibliotecas y encontré muchas cosas en el proceso de finalización Las dificultades me han hecho ganar mucho, y me he dado cuenta de mis defectos. Estudiaré más en el futuro

 

Supongo que te gusta

Origin www.cnblogs.com/xx1129/p/12742041.html
Recomendado
Clasificación