网页爬取技术问询:提取allTyres变量轮胎数据并导出CSV
轮胎数据爬取与CSV导出实现方案(Python)
1. 环境准备
先安装所需依赖库:
pip install requests beautifulsoup4 pandas json
2. 核心实现步骤
步骤1:获取网页源代码
模拟浏览器请求目标页面,拿到完整HTML内容:
import requests import re import json import pandas as pd # 目标网址 url = "http://www.dexel.co.uk/shopping/tyre-results?width=205&profile=55&rim=16&speed=" # 请求头,避免被反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 发送请求 response = requests.get(url, headers=headers) response.encoding = response.apparent_encoding html_content = response.text
步骤2:提取var allTyres中的数据
用正则匹配出变量内的JSON结构,转换为Python可处理的列表:
# 匹配var allTyres后的JSON数组 pattern = re.compile(r'var allTyres = (\[.*?\]);', re.DOTALL) match = pattern.search(html_content) if not match: print("未定位到allTyres数据块") exit() # 转成Python数据结构 tyres_list = json.loads(match.group(1))
步骤3:提取目标字段
遍历轮胎数据,按需提取字段,处理冬季/夏季轮胎的标记:
processed_data = [] for tyre in tyres_list: # 提取基础字段,缺失时用空字符串兜底 brand = tyre.get('manufacturer', '') desc = tyre.get('description', '') price = tyre.get('price', '') # 处理冬季/夏季标记:1代表是,0代表否 is_winter = 1 if tyre.get('winter') else 0 # 假设非冬季胎即为夏季胎,若有四季胎需根据实际字段调整判断逻辑 is_summer = 1 if not tyre.get('winter') else 0 processed_data.append({ "manufacturer": brand, "description": desc, "winter": is_winter, "summer": is_summer, "price": price })
步骤4:导出为CSV格式
用pandas将整理后的数据写入CSV文件:
df = pd.DataFrame(processed_data) # 导出时禁用索引,用utf-8-sig避免中文乱码 df.to_csv('tyres_data.csv', index=False, encoding='utf-8-sig') print("数据已成功导出到 tyres_data.csv")
3. 注意事项
- 若频繁请求被网站拦截,可添加
time.sleep(1)(需导入time库)设置请求间隔 - 若后续网站结构变更,需重新调整正则匹配规则或字段提取逻辑
- 部分轮胎可能存在特殊类型(如四季胎),需根据页面实际数据调整
summer字段的判断逻辑
内容的提问来源于stack exchange,提问作者Tae-Cat
相关产品推荐
相关产品推荐

