从 0 到 1 学爬虫:Python 基础语法在爬虫中的实战运用用这个标题写一篇文章,在当前对话窗口输出
爬虫作为数据采集的核心技术,早已渗透到数据分析、市场调研、学术研究等多个领域。而 Python 凭借简洁的语法、丰富的库生态,成为爬虫开发的首选语言。对于零基础学习者而言,无需急于钻研复杂框架,先掌握 Python 基础语法在爬虫中的实战运用,就能快速搭建起简单高效的爬虫程序。本文将从实战角度出发,拆解变量、循环、条件判断、函数等基础语法在爬虫中的核心作用,带大家一步步实现从 0 到 1 的爬虫入门。
一、变量与数据类型:爬虫中的 “数据容器”
爬虫的核心目标是采集数据,而变量与数据类型正是存储和处理这些数据的基础。
核心运用场景
- 存储关键信息:将目标网站 URL、请求头参数(如 User-Agent)、爬取到的文本 / 图片数据等存入变量,方便后续调用。
- 数据格式转换:爬取到的原始数据多为字符串,需通过 int、float 等类型转换,满足数值计算需求;通过列表、字典存储结构化数据(如多条商品信息)。
实战示例:存储爬虫核心参数
python
运行
# 字符串变量:存储目标URL和请求头
target_url = "https://www.example.com" # 目标网站地址
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" # 模拟浏览器请求头# 字典变量:组织请求头参数(爬虫必备,避免被反爬)
headers = {"User-Agent": user_agent,"Referer": target_url # 模拟来源页面,提升请求成功率
}# 列表变量:存储多个待爬取的URL
url_list = [f"https://www.example.com/page/{i}" for i in range(1, 5)] # 批量生成1-4页的URL
二、条件判断:爬虫中的 “决策逻辑”
网页结构往往存在差异(如部分页面无数据、数据格式不一致),条件判断能帮助爬虫应对这些异常情况,确保程序稳定运行。
核心运用场景
- 数据有效性校验:判断爬取到的数据是否为空、是否符合预期格式(如价格是否为数字)。
- 反爬应对:根据响应状态码(如 200 成功、403 禁止访问)调整策略,如更换请求头。
- 页面跳转判断:判断是否到达最后一页,终止循环爬取。
实战示例:响应状态码判断与数据校验
python
运行
import requestsresponse = requests.get(target_url, headers=headers)# 条件判断:根据响应状态码判断请求是否成功
if response.status_code == 200:# 爬取页面内容(假设爬取商品价格,原始数据为字符串)price_str = response.text.split('price:')[1].split('"')[1] # 模拟从HTML中提取价格字符串# 条件判断:校验价格是否为有效数字if price_str.replace('.', '').isdigit():price = float(price_str) # 转换为浮点型用于计算print(f"商品价格:{price}元")else:print("价格数据无效,跳过该商品")
else:print(f"请求失败,状态码:{response.status_code},请检查URL或请求头")
三、循环:爬虫中的 “批量采集工具”
爬虫常需批量处理多个页面或多条数据,for 循环、while 循环是实现批量采集的核心语法。
核心运用场景
- 多页面爬取:遍历分页 URL 列表,批量采集多页数据。
- 多元素提取:从单个页面中遍历多个目标元素(如商品列表、新闻标题)。
- 重试机制:遇到请求失败时,通过 while 循环实现有限次数的重试。
实战示例:批量爬取多页商品标题
python
运行
# 遍历URL列表,批量爬取1-4页的商品标题
for url in url_list:response = requests.get(url, headers=headers)if response.status_code == 200:# 模拟从HTML中提取商品标题列表(实际需用解析库,此处用字符串处理简化)titles = response.text.split('product-title">')[1:] # 分割出包含标题的片段for title in titles[:5]: # 遍历前5个商品标题product_title = title.split('</div>')[0].strip() # 提取纯标题文本print(f"商品标题:{product_title}")print(f"第{url_list.index(url)+1}页爬取完成\n")
四、函数:爬虫中的 “代码复用与模块化”
随着爬虫逻辑复杂度提升,将重复功能(如请求发送、数据解析、文件保存)封装为函数,能让代码更简洁、易维护。
核心运用场景
- 封装通用功能:将请求发送、数据清洗、文件写入等重复操作封装为函数,避免代码冗余。
- 实现模块化开发:按功能拆分函数(如爬取函数、解析函数、保存函数),便于后续扩展(如添加多线程、反爬策略)。
实战示例:模块化封装爬虫功能
python
运行
def send_request(url, headers):"""封装请求发送功能,返回响应对象"""try:response = requests.get(url, headers=headers, timeout=10) # 设置超时时间,避免卡死response.raise_for_status() # 抛出HTTP请求异常return responseexcept Exception as e:print(f"请求异常:{e}")return Nonedef parse_data(response):"""封装数据解析功能,返回结构化数据"""if not response:return []data_list = []titles = response.text.split('product-title">')[1:]for title in titles[:5]:product_title = title.split('</div>')[0].strip()data_list.append({"title": product_title})return data_listdef save_data(data, filename):"""封装数据保存功能,将数据写入txt文件"""with open(filename, 'a', encoding='utf-8') as f:for item in data:f.write(f"商品标题:{item['title']}\n")print(f"数据已保存到{filename}")# 主函数:串联爬虫流程
def main():headers = {"User-Agent": user_agent}for url in url_list:response = send_request(url, headers)data = parse_data(response)if data:save_data(data, "products.txt")if __name__ == "__main__":main()
五、列表推导式:爬虫中的 “高效数据处理”
列表推导式是 Python 特有的简洁语法,能快速处理爬虫中的数据筛选、转换需求,比传统循环更高效、代码更简洁。
核心运用场景
- 批量生成 URL:快速生成多页分页 URL,无需繁琐的 for 循环。
- 数据筛选与转换:从爬取的原始数据中筛选有效信息,或批量转换数据格式。
实战示例:高效处理爬虫数据
python
运行
# 1. 列表推导式:批量生成分页URL(替代传统for循环)
url_list = [f"https://www.example.com/page/{i}" for i in range(1, 5)]# 2. 列表推导式:筛选价格大于100元的商品
# 假设已爬取到商品数据列表
products = [{"title": "商品A", "price": 99.9},{"title": "商品B", "price": 199.9},{"title": "商品C", "price": 89.9},{"title": "商品D", "price": 299.9}
]# 筛选价格>100的商品,生成新列表
high_price_products = [p for p in products if p["price"] > 100]
print("高价商品:", high_price_products)# 3. 列表推导式:批量提取商品标题(数据转换)
product_titles = [p["title"] for p in products]
print("所有商品标题:", product_titles)
六、实战总结:基础语法搭建完整爬虫
结合以上基础语法,我们可以快速搭建一个 “请求 - 解析 - 保存” 的完整爬虫流程:
- 用变量存储 URL、请求头等核心参数;
- 用循环批量遍历多页 URL;
- 用条件判断处理请求异常和数据校验;
- 用函数封装模块化功能,提升代码复用性;
- 用列表推导式高效处理数据。
其实爬虫的核心逻辑并不复杂,Python 基础语法就是搭建爬虫的 “基石”。掌握这些语法的实战运用后,再逐步学习 BeautifulSoup、XPath 等解析库,以及反爬策略、多线程爬取等进阶内容,就能轻松应对更复杂的爬虫场景。
