您当前的位置: 首页 >  Python

野奔在山外的猫

暂无认证

  • 4浏览

    0关注

    85博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【案例实现】使用 Python 获取页面商品数据(修正版)

野奔在山外的猫 发布时间:2021-02-05 18:10:54 ,浏览量:4

程序语言:Python 开发平台:PyCharm【2017版本以上】  

前言须知

本文目的:实现基于 PyCharm 开发平台的对 TB商品信息 进行爬取数据的行为。 爬虫对象:TB商品-凹凸曼 必须掌握:Python + HTML 基础知识

其他重要声明:本文章仅用于学习与分享,任何从事用于非法行为所造成的后果请自负。  

分析:爬取流程 与 第三方依赖库 剖析

在这里插入图片描述

如上图所示,完整的 Python 爬取流程。根据上述流程表反馈信息,至少有 3个 阶段的内容需程序实现。即 网页数据请求、响应数据解析、数据信息存储 三个板块。

  • 网页数据请求:模拟浏览器请求服务器终端数据,任何访问网络地址的行为,其远端服务器将返回数据信息。 网页数据的存储位置:存储于网页的 HTML 源码中。

  • 响应数据解析:并非访问即可获取数据。存在远端服务器宕机、网络波动、远端防火墙禁止访问等因素阻碍获取数据内容。能否获取到信息决定后续操作是否可执行。

  • 数据信息存储:记录网页面的数据信息,用于二次清洗筛选重要数据后的内容存储。

综合上述分析,为可总结使用到以下至少3个 Python 库。

  • requests库:主要模拟浏览器访问网络地址的方式。【重要】
  • re库:主要用于访问成功后,对数据信息的二次筛查与清洗工作。【重要】
  • time库:主要模拟计时器,在部分情况下有助于提高访问成功率。 存在被服务器配备有限制访问频率的IP监禁机制,使用该库可有效减少单位时间的访问频率。

实践:模拟对TB的数据爬取 准备工作:引入第三方依赖库
import requests  # 重要
import re        # 重要
请求服务:解析服务器响应结果
# 定义获取HTML内容的方法
def getHtmlText(URL):
    try:
        r = requests.get(url=URL, timeout=30)
        
        # 检查响应
        r.raise_for_status()
        print("...网页响应成功 200")

        # 检查是否乱码
        if r.encoding == 'utf-8':
            print("...网页源码为utf-8 无乱码")
        else:
            print(r.encoding)
            return
        # time.sleep(2)
        print("...获取HTML页面完成")
        return r.text
    except:
        return ""
  • requests.get():请求数据服务器的方法。 参数timeout:表示连接超时设定时间后将不再进行请求。
  • raise_for_status():检查访问是否成功的依据,默认情况下,返回 200 成功请求信息。若失败则返回其他信息。此处应建议新增r.raise_for_status() == 200的判断最佳。
  • encoding:是计算机识别编码格式的依据,根据不同地区用户的语言所制定的本地化文字数据库。 例如国内通用的是 UTF-8(简体中文)。若为其他编码格式,乱码文字将不利于我们进行解析。
  • try...except:异常情况的多种处理方法。except不唯一。
解析数据:筛选与清洗关键数据
# 定义解析数据的方法
def fillUnivList(uList, html):
    try:
        names = re.findall(r'\', html)
        prices = re.findall(r'\[\d\.]*', html)
        print("...页面数据解析完成")
        # time.sleep(2)
        print("...开始数据清洗")
        for i in range(len(names)):
            name = names[i].split('"')[3]  # 以"为切割标识,取第4段
            price = re.split(">|            
关注
打赏
1659777066
查看更多评论
0.0404s