Ejemplos de entrada del rastreador de Python cinco información de producto de Taobao rastreo dirigido (versión optimizada)

Escribir al frente

  Este ejemplo fue escrito por el autor hoy mientras estudiaba en el MOOC de la Universidad China (Instituto de Tecnología Songtian Beijing). Pero después de que terminé de escribirlo rápidamente, encontré que algo andaba mal, porque después de escribir el código de acuerdo con el profesor, la información no se podía rastrear. Después de algunos lanzamientos, básicamente resolví el problema e hice algunas optimizaciones. Escribir este blog Para que conste, la siguiente figura es el resultado final del rastreo.

Inserte la descripción de la imagen aquí

Uno, rastrear la página original

  La página de rastreo es un sitio web de Taobao. Tomando la ropa de mujer como ejemplo, la imagen original es la siguiente. Dado que la clasificación de los productos de Taobao se actualiza en tiempo real, el orden de los resultados de rastreo puede ser diferente del orden del sitio web. El contenido rastreado en este ejemplo es el precio y el nombre del producto, y se le agrega un número de serie.

Inserte la descripción de la imagen aquí

Dos, ideas de programación

  Esta parte del profesor Songtian dio una explicación en la clase, aquí la organizaré y la compartiré con ustedes.

1. Descripción de la función

Objetivo: obtener información en la página de búsqueda de Taobao y extraer el nombre y el precio.

Comprensión:
(1). Obtener la interfaz de búsqueda de Taobao
(2). Manejo del cambio de página

Ruta técnica: solicitudes-re

2. El diseño de la estructura del programa

Paso 1: Envíe una solicitud de búsqueda de productos y obtenga páginas en un bucle.
Paso 2: Para cada página, extraiga el nombre del producto y la información del precio.
Paso 3: Muestra la información en la pantalla

Defina tres funciones correspondientes a los tres pasos anteriores:

(1) getHTMLText () para obtener la página
(2) parsePage () para analizar cada página obtenida
(3) printGoodsList () para mostrar la información del producto en la pantalla

Tres, el proceso de programación

1. Resuelve el problema de pasar la página

  Primero, echemos un vistazo a las URL de las tres primeras páginas.

Inserte la descripción de la imagen aquí
  Observando el número de productos en cada página de Taobao, podemos encontrar que hay 44 productos en cada página. Combinando los resultados anteriores, podemos adivinar que la variable s representa el número del producto inicial en la segunda, tercera ... página. Según esta regla, podemos construir enlaces URL para diferentes páginas.

el código se muestra a continuación:

for i in range(depth):#对每次翻页后的URL链接进行设计
    url = start_url + '&s='+str(44*i)
    html = getHTMLText(url)
    parsePage(infoList,html)

2. Escribe la función getHTMLText ()

def getHTMLText(url):#获得页面
    try:
        kv = {
    
    'user-agent': 'Mozilla/5.0',
              'cookie':' '#请自行获取
              }
        r = requests.get(url,headers=kv,timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("获取页面失败")

Para obtener información sobre cómo obtener cookies, consulte el
enlace de mi blog : https://blog.csdn.net/weixin_44578172/article/details/109353017 .

3. Escriba la función parsePage ()

(1). Ideas de programación de análisis de contenido

  Primero, observe el código fuente de la página de resultados de búsqueda de ropa para mujeres.
Inserte la descripción de la imagen aquí
  Al observar el código fuente, descubrimos que los precios y los nombres de todos los productos básicos en Taobao están en los pares clave-valor correspondientes, a saber: "view_price": "price", "view_title": " nombre". Por tanto, si queremos obtener estas dos informaciones, solo necesitamos recuperar view_price y view_title en el texto obtenido y extraer el contenido relacionado posterior, aquí usamos el método de expresión regular.

(2). Código de función

def parsePage(ilt,html):#对每一个获得的页面进行解析
#两个变量分别是结果的列表类型和相关的HTML页面的信息
    try:
        re1 = re.compile(r'\"view_price\"\:\"[\d\.]*\"')#编译商品价格正则表达式
        re2 = re.compile(r'\"raw_title\"\:\".*?\"')#编译商品名称正则表达式
        plt = re1.findall(html)
        tlt = re2.findall(html)
        #plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
        #tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])#去掉view_price字段,只要价格部分,eval将获取到的最外层/内层的单引号或双引号去掉
            title = eval(tlt[i].split(':')[1])#去掉raw_title字段,只要名称部分
            ilt.append([price,title])
    except:
        print("网页解析失败")

4. Escriba printGoodsList ()

def printGoodsList(ilt):#将商品的信息输出到屏幕上
    try:
        tplt = "{:4}\t{:8}\t{:16}" #定义打印模板
        print(tplt.format("序号","价格","商品名称"))
        count = 0
        for s in ilt:
            count = count + 1
            print(tplt.format(count,s[0],s[1]))
    except:
        print("输出失败")

Cuarto, el código completo

'''
功能描述

目标:获取淘宝搜索页面的信息,提取其中的名称和价格。

理解:
1.获得淘宝的搜索接口
2.对翻页的处理

技术路线:requests-re

程序的结构设计
步骤1:提交商品搜索请求,循环获取页面
步骤2:对于每个页面,提取商品名称和价格信息
步骤3:将信息输出到屏幕上
'''
import requests
import re

def getHTMLText(url):#获得页面
    try:
        kv = {
    
    'user-agent': 'Mozilla/5.0',
              'cookie':' '#请自行获取
              }
        r = requests.get(url,headers=kv,timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("获取页面失败")

def parsePage(ilt,html):#对每一个获得的页面进行解析
#两个变量分别是结果的列表类型和相关的HTML页面的信息
    try:
        re1 = re.compile(r'\"view_price\"\:\"[\d\.]*\"')#编译商品价格正则表达式
        re2 = re.compile(r'\"raw_title\"\:\".*?\"')#编译商品名称正则表达式
        plt = re1.findall(html)
        tlt = re2.findall(html)
        #plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
        #tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])#去掉view_price字段,只要价格部分,eval将获取到的最外层/内层的单引号或双引号去掉
            title = eval(tlt[i].split(':')[1])#去掉raw_title字段,只要名称部分
            ilt.append([price,title])
    except:
        print("网页解析失败")

def printGoodsList(ilt):#将商品的信息输出到屏幕上
    try:
        tplt = "{:4}\t{:8}\t{:16}" #定义打印模板
        print(tplt.format("序号","价格","商品名称"))
        count = 0
        for s in ilt:
            count = count + 1
            print(tplt.format(count,s[0],s[1]))
    except:
        print("输出失败")

def main():
    goods = input("请输入想要搜索的商品:") #定义搜索关键词变量
    depth = input("请输入想要搜索商品的深度(整数):") #定义爬取的深度即页数
    depth = int(depth)
    start_url = 'https://s.taobao.com/search?q='+goods
    infoList = [] #定义整个的输出结果变量
    for i in range(depth):#对每次翻页后的URL链接进行设计
        try:
            url = start_url + '&s='+str(44*i)
            html = getHTMLText(url)
            parsePage(infoList,html)
        except:
            continue
    printGoodsList(infoList)

#调用主函数
main()

  Al final de este artículo, indique cualquier error ~

Cita de

中国大学MOOC Python网络爬虫与信息提取
https://www.icourse163.org/course/BIT-1001870001

Supongo que te gusta

Origin blog.csdn.net/weixin_44578172/article/details/109356900
Recomendado
Clasificación