程序语言: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(">|
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?