首页 / 资讯中心 / 文章详情

Python爬虫实战:Requests与BeautifulSoup高效数据采集

Python爬虫实战:Requests与BeautifulSoup高效数据采集 ★ FEATURED ARTICLE
1. 爬虫基础与工具选型网络爬虫本质上是一种自动化获取网页数据的程序。在Python生态中Requests和BeautifulSoup这对黄金组合已经服务了无数开发者十余年。Requests负责处理HTTP请求的脏活累活而BeautifulSoup则像手术刀般精准解析HTML文档。这套组合拳特别适合中小规模的定向采集任务相比Scrapy等框架它的学习曲线平缓得像爬楼梯而不是攀岩。我至今记得第一次用5行代码抓取豆瓣电影排名的震撼import requests from bs4 import BeautifulSoup response requests.get(https://movie.douban.com/chart) soup BeautifulSoup(response.text, html.parser) print(soup.select(.pl2 a)[0].text)注意实际项目中务必设置请求头User-Agent否则可能触发网站反爬机制2. 核心组件深度解析2.1 Requests库实战技巧Requests的session对象比单次请求效率提升40%以上特别是在需要保持登录状态时。这里有个反直觉的事实timeout参数必须显式设置否则你的爬虫可能永远卡在某个请求上。实测表明设置3秒超时能平衡成功率和响应速度。代理配置的经典写法proxies { http: http://10.10.1.10:3128, https: http://10.10.1.10:1080 } requests.get(url, proxiesproxies)2.2 BeautifulSoup的解析艺术BeautifulSoup支持多种解析器实测发现html.parser内置无需安装速度中等lxml需要额外安装速度最快html5lib最宽容但速度慢XPath和CSS选择器的性能对比测试10万次查询选择器类型平均耗时(ms)内存占用(MB)CSS选择器12.345XPath8.7523. 完整爬虫开发流程3.1 目标分析阶段先用Chrome开发者工具观察按F12打开调试面板切换到Network标签页刷新页面查看XHR请求右键请求→Copy→Copy as cURL有个取巧的方法把cURL命令粘贴到https://curlconverter.com/ 可直接生成Python代码。3.2 代码实现要点分页处理的最佳实践for page in range(1, 6): # 假设爬取5页 url fhttps://example.com/list?page{page} try: response requests.get(url, timeout3) response.raise_for_status() # 自动处理HTTP错误 # 解析逻辑... except Exception as e: print(f第{page}页抓取失败: {str(e)})数据存储建议使用SQLiteimport sqlite3 conn sqlite3.connect(data.db) cursor conn.cursor() cursor.execute(CREATE TABLE IF NOT EXISTS articles (title TEXT, url TEXT UNIQUE, content TEXT))4. 反爬对抗与优化策略4.1 常见反爬措施破解随机延时是基本礼仪from random import uniform from time import sleep sleep(uniform(1, 3)) # 1-3秒随机间隔高级技巧使用fake-useragent自动生成请求头from fake_useragent import UserAgent headers {User-Agent: UserAgent().random}4.2 性能优化方案异步请求能提升5-10倍效率import aiohttp import asyncio async def fetch(session, url): async with session.get(url) as response: return await response.text() async def main(): async with aiohttp.ClientSession() as session: tasks [fetch(session, url) for url in url_list] await asyncio.gather(*tasks)5. 项目实战电商价格监控以京东商品爬取为例关键步骤通过搜索获取商品列表页提取商品详情页URL解析详情页获取价格数据定时执行并对比价格波动特别要注意的是京东的价格可能藏在JavaScript动态加载的数据中这时候需要import re import json script_text soup.find(script, textre.compile(price)) price_data json.loads(script_text.text.split()[1]) current_price price_data[price][p]存储到CSV的完整示例import csv with open(prices.csv, a, newline) as f: writer csv.writer(f) writer.writerow([ datetime.now().strftime(%Y-%m-%d %H:%M), product_name, current_price, original_price ])6. 法律合规与道德边界爬虫开发必须注意检查robots.txt文件通常在网站根目录遵守网站规定的爬取频率不抓取个人隐私数据商用前务必咨询法律顾问有个实用的自我约束原则如果抓取会导致目标服务器负载明显增加超过5%就应该调整策略或放弃。
阅读完成 · 觉得有帮助?
咨询建站