Exemplos de entrada do rastreador Python cinco informações do produto Taobao rastreamento direcionado (versão otimizada)

Escreva na frente

  Este exemplo foi escrito pelo autor hoje enquanto estudava no MOOC da Universidade Chinesa (Instituto de Tecnologia Songtian de Pequim). Mas depois que terminei de escrever rapidamente, descobri que algo estava errado, porque depois de escrever o código de acordo com o professor, as informações não puderam ser rastreadas. Após algumas tentativas, basicamente resolvi o problema e fiz algumas otimizações. Escreva este blog Para registro, a figura a seguir é o resultado final do rastreamento.

Insira a descrição da imagem aqui

Um, rastreie a página original

  A página de rastreamento é um site do Taobao. Tomando as roupas femininas como exemplo, a imagem original é a seguinte: Como a classificação dos produtos do Taobao é atualizada em tempo real, a ordem dos resultados do rastreamento pode ser diferente da ordem do site. O conteúdo rastreado neste exemplo é o preço e o nome do produto, e um número de série é adicionado a ele.

Insira a descrição da imagem aqui

Dois, idéias de programação

  Essa parte do professor Songtian deu uma explicação na aula, aqui irei organizar e compartilhar com vocês.

1. Descrição da função

Objetivo: obter informações na página de pesquisa do Taobao e extrair o nome e o preço.

Compreensão:
(1). Obtenha a interface de pesquisa do Taobao
(2). Manuseio da virada de página

Rota técnica: requisições-re

2. O design da estrutura do programa

Etapa 1: envie uma solicitação de pesquisa de produto e obtenha as páginas em um loop.
Etapa 2: para cada página, extraia o nome do produto e as informações de preço.
Etapa 3: envie as informações na tela

Defina três funções correspondentes às três etapas acima:

(1) getHTMLText () para obter a página
(2) parsePage () para analisar cada página obtida
(3) printGoodsList () para enviar informações do produto para a tela

Três, o processo de programação

1. Resolva o problema de virar a página

  Primeiro, vamos dar uma olhada nos URLs das três primeiras páginas

Insira a descrição da imagem aqui
  Observando a quantidade de produtos em cada página do Taobao, podemos descobrir que existem 44 produtos em cada página. Combinando os resultados acima, podemos adivinhar que a variável s representa o número do produto inicial na segunda, terceira ... página. Com base nesta regra, podemos construir links de URL para páginas diferentes.

código mostrado abaixo:

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

2. Escreva a função 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 saber como obter cookies, consulte o
link do meu blog : https://blog.csdn.net/weixin_44578172/article/details/109353017 .

3. Escreva a função parsePage ()

(1). Ideias de programação de análise de conteúdo

  Primeiro, olhe o código-fonte da página de resultados da pesquisa de roupas femininas.
Insira a descrição da imagem aqui
  Observando o código-fonte, descobrimos que os preços e nomes de todas as mercadorias no Taobao estão nos pares de valores-chave correspondentes, a saber: "view_price": "price", "view_title": " nome". Portanto, se quisermos obter essas duas informações, precisamos apenas recuperar view_price e view_title no texto obtido e extrair o conteúdo relacionado subsequente.Aqui usamos o método de expressão regular.

(2). Código de função

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. Escreva 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("输出失败")

Quarto, o 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()

  No final deste artigo, indique quaisquer erros ~

Citação do

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

Acho que você gosta

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