程序语言: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(">|
关注
打赏
热门博文
- 【解决】MissingReferenceException: The object of type ‘GameObject‘ has been destroyed...
- 【解决吧】DontDestroyOnLoad only works for root GameObjects or components on root GameObjects.
- 【解决】Can‘t add ‘UniversalAdditionalCameraData‘ to SceneCamera because a ‘UniversalAdditionalCamera...
- 【解决】关于 Unity Hub 获取许可证失败 或 无响应导致无法开发的问题
- 【解决】UnityWebRequest 下请求 EXCEL数据 返回 PK 结果的解决方案
- 【解决】旧 Unity InputSystem 下的按键未响应的解决方案
- 【解决】修改子物体Transform信息导致变换不对称、异常问题的解决方案
- 【案例设计】模拟 视线 影响玩家移动规则的设计演变思路
- 【案例设计】Free Camera 设计与实现思路
- 【Unity 题型】变量和数据类型