新泽西州政府加油站页面爬虫:现有代码后的下一步操作咨询
如何从新泽西州加油站页面提取正确数据?
嘿,看起来你已经迈出了爬取这个加油站页面的第一步,但目前的代码只是把所有<p>标签都打印出来,这里面肯定混了很多无关内容(比如页面的说明文字、版权信息啥的)。咱们一步步来调整,把有用的加油站数据提取出来:
第一步:先搞清楚页面的HTML结构
首先打开浏览器的开发者工具(按F12),定位到一个加油站的信息块,看看这些数据是怎么被组织的:
- 是不是所有加油站信息都放在一个带有特定类名的容器里?比如可能是
<div class="fuel-location">或者类似的标签 - 每个加油站的名称、地址、电话这些字段,是不是对应特定的
<p>标签,或者有明确的文本标识(比如“Station Name:”、“Address:”)
第二步:筛选出仅包含加油站信息的元素
比如如果页面里每个加油站都在一个class="location-entry"的<div>里,那咱们先把这些容器找出来,而不是直接遍历所有<p>:
import requests from bs4 import BeautifulSoup page = requests.get("http://www.nj.gov/treasury/administration/statewide-support/motor-fuel-locations.shtml") soup = BeautifulSoup(page.content, 'html.parser') # 先定位所有加油站的容器(这里的class名需要你根据实际页面调整) station_containers = soup.find_all('div', class_='location-entry')
第三步:从容器里提取结构化数据
接下来,在每个容器里提取具体的字段。假设每个容器里的<p>标签分别对应名称、地址、电话,或者带有明确的前缀,咱们可以这样处理:
station_list = [] for container in station_containers: station_data = {} # 遍历容器内的所有p标签 for p_tag in container.find_all('p'): text = p_tag.get_text(strip=True) # 根据文本前缀拆分字段 if text.startswith("Station Name:"): station_data['name'] = text.replace("Station Name:", "").strip() elif text.startswith("Address:"): station_data['address'] = text.replace("Address:", "").strip() elif text.startswith("Phone:"): station_data['phone'] = text.replace("Phone:", "").strip() # 把整理好的字典加入列表 if station_data: station_list.append(station_data) # 打印第一个加油站的信息看看效果 print(station_list[0])
第四步:清理数据并存储
如果提取到的文本有多余的换行、空格,或者需要拆分更细的信息(比如地址里的城市、邮编),可以用字符串处理或者正则表达式来优化。最后把数据保存成CSV或JSON文件,方便后续使用:
# 保存为CSV文件 import csv with open('nj_gas_stations.csv', 'w', newline='', encoding='utf-8') as csv_file: # 定义表头 fieldnames = ['name', 'address', 'phone'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() writer.writerows(station_list)
关键提示
一定要根据实际页面的HTML结构来调整选择器(比如容器的class名、字段的前缀文本),因为网页可能会更新,手动检查几个加油站的代码结构是最稳妥的方式。
内容的提问来源于stack exchange,提问作者ziggy
相关产品推荐
相关产品推荐

