python - 机场数据 - 我如何抓取数据并维护层次结构?
问题描述
我正在尝试从https://skytraxratings.com/airports/hamad-international-airport-rating抓取信息
我想制作一个 csv/excel,其中包含以下列 - 类别, - 子类别 - 评级
category subcategory rating 地面交通 公共交通选择 3.5 地面交通 到公共交通的距离 4 地面交通 机场出租车服务 4.5 地面交通租车 4.5 安检 安检引导标牌 4 安检 等候时间 4 安检 服务效率 4 安检 员工态度和礼貌 4安全检查 员工语言技能 4 安全检查 FastTrack 安全 5
但我将每一列作为一个列表,没有层次结构完整性
category subCategory starRating 地面交通、安检、移民服务、寻路和指示牌、到达、出发、转机、航站楼舒适度、航站楼设施、购物设施、食品和饮料
公共交通选择,到公共交通的距离,机场出租车服务,汽车租赁,筛选指南标牌,等待时间,服务效率,工作人员态度和礼貌,工作人员语言技能,FastTrack安全,
,,
尝试过在scrapy上搜索和阅读文档,但我迷路了
import scrapy
class HiaskytraxratingsSpider(scrapy.Spider):
name = 'HIASkytraxRatings'
allowed_domains = ['skytraxratings.com']
start_urls = ['https://skytraxratings.com/airports/hamad-international-airport-rating']
def parse(self, response):
print("processing:"+response.url)
#Extract using css selectors
#None
#Extract using xpath
category = response.xpath("//div[@class='ratingstable']/h4[@class='ratingstable__title fontsize-1']/text()").extract()
subCategory = response.xpath("//div[@class='ratingstable']/div[@class='ratingstable__ratings']/div[@class='rating']/span[@class='rating__title']/text()").extract()
starRating = response.xpath("//div[@class='ratingstable']/div[@class='ratingstable__ratings']/div[@class='rating']/span[@class='rating__stars']").extract()
#yield or give the scraped info to scrappy
yield {'page':response.url,'category': category,'subCategory':subCategory,'starRating':starRating}
pass
我期望:
类别子类别评分 地面交通 公共交通选择 3.5 地面交通 到公共交通的距离 4 地面交通 机场出租车服务 4.5 地面交通租车 4.5 安检 安检指南标牌 4 安检等候时间 4 安检服务效率 4 安检人员态度4 安全检查 员工语言技能 4 安全检查 FastTrack 安全 5
任何人都可以帮助这个scrapy noob
解决方案
您将一次获得所有必填字段。尝试遍历每个部门并解析结果。
这里有一个例子供你理解。如何循环划分并使用相对 xpath。
def parse(self, response):
print("processing:" + response.url)
# Extract using css selectors
# None
# Extract using xpath
categoryBox = ratingbox = response.xpath('//*[@class="ratingstable"]')
for box in categoryBox:
category = box.xpath('./h4/text()').get(default='')
ratingBox = box.xpath('.//*[@class="rating"]')
for rating in ratingBox:
star_rating = len(rating.xpath('.//*[@class="fa fa-star"]').getall())
sub_category = rating.xpath('.//*[@class="rating__title"]/text()').get(default='')
yield {'page': response.url, 'category': category, 'subCategory': sub_category, 'starRating': star_rating}
# category = response.xpath(
# "//div[@class='ratingstable']/h4[@class='ratingstable__title fontsize-1']/text()").extract()
# subCategory = response.xpath(
# "//div[@class='ratingstable']/div[@class='ratingstable__ratings']/div[@class='rating']/span[@class='rating__title']/text()").extract()
# starRating = response.xpath(
# "//div[@class='ratingstable']/div[@class='ratingstable__ratings']/div[@class='rating']/span[@class='rating__stars']").extract()
# yield or give the scraped info to scrappy
输出
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Ground Transportation', 'subCategory': 'Public Transport options', 'starRating': 3}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Ground Transportation', 'subCategory': 'Distance to public transport', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Ground Transportation', 'subCategory': 'Airport taxi service', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Ground Transportation', 'subCategory': 'Car Rental', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Security Screening', 'subCategory': 'Screening guide signage', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Security Screening', 'subCategory': 'Waiting times', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Security Screening', 'subCategory': 'Service efficiency', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Security Screening', 'subCategory': 'Staff attitude and courtesy', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Security Screening', 'subCategory': 'Staff language skills', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Security Screening', 'subCategory': 'FastTrack security', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Immigration Service', 'subCategory': 'Waiting times - arrivals', 'starRating': 3}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Immigration Service', 'subCategory': 'Waiting times - departures', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Immigration Service', 'subCategory': 'Staff attitude and courtesy', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Immigration Service', 'subCategory': 'Staff language skills', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Immigration Service', 'subCategory': 'FastTrack immigration', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Ease of wayfinding - arrivals', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Ease of wayfinding - transfer', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Ease of wayfinding - departures', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Clarity of signs & symbols', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Signage language choices', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'FIDS : positioning in terminal', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'FIDS : clarity of display', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Terminal maps', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Airport App navigation', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Airport "help" staff', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Info Kiosks', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Wayfinding & Signage', 'subCategory': 'Info / Help counter service', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Arrival', 'subCategory': 'Walking distances', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Arrival', 'subCategory': 'Availability of toilets', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Arrival', 'subCategory': 'Baggage hall facilities', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Arrival', 'subCategory': 'Baggage delivery times', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Arrival', 'subCategory': 'Baggage carts', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Arrival', 'subCategory': 'Meet and greet facilities', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Departure', 'subCategory': 'Signage to check-in', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Departure', 'subCategory': 'Congestion around check-in', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Departure', 'subCategory': 'Queuing systems', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Departure', 'subCategory': 'Seating near check-in', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Departure', 'subCategory': 'Premium check-in facility', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Departure', 'subCategory': 'Signage to security / departures', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Transfer', 'subCategory': 'Walking distances', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Transfer', 'subCategory': 'Signage to transfer areas', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Transfer', 'subCategory': 'Transfer security screening', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Transfer', 'subCategory': 'Transfer waiting area', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Transfer', 'subCategory': 'Rest area for transfer customers', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Transfer', 'subCategory': 'Ease of transfer process', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Congestion around terminal', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Air temperature', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Décor and condition', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Seat availability', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Seat types and comfort', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Access to power / charging points', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Cleanliness of seats', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Cleanliness of washrooms', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Cleanliness of public areas', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'PRM washrooms', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Comfort', 'subCategory': 'Baby changing rooms', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': "Clarity of airport PA's", 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'PA language translations', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'ATM availability', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'WiFi : ease of log-in', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'WiFi : free time allowance', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Internet kiosk facilities', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Childrens Play area', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Shower facilities', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Quiet / relaxation areas', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Dayroom facility', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Terminal hotel', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Other leisure facilities', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Terminal Facilities', 'subCategory': 'Vending machines', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Shopping Facilities', 'subCategory': 'Selection of shops : landside', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Shopping Facilities', 'subCategory': 'Selection of shops : airside', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Shopping Facilities', 'subCategory': 'Choice of mid-price shops', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Shopping Facilities', 'subCategory': 'Choice of luxury brands', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Shopping Facilities', 'subCategory': 'Staff service in shops', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Food and beverage choice : landside', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Fast food choice : landside', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'International brands : landside', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Food and beverage choice : airside', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Fast food options : airside', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'International brands : airside', 'starRating': 5}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Food and beverage : cleanliness', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Food and beverage : prices', 'starRating': 4}
{'page': 'https://skytraxratings.com/airports/hamad-international-airport-rating', 'category': 'Food & Beverage', 'subCategory': 'Food and beverage : staff service', 'starRating': 4}
半星我还没数。只需读取半颗星的数量并将计数除以 2 并添加到 star_rating。
推荐阅读
- asp.net-mvc - 如何在模型创建网络核心 2.1 中生成列更新选项?
- android-recyclerview - 在android recyclerview中滑动加载相同的图像给定不同的url - Java
- java - Java servlet doPost 方法不起作用
- python - pandas 数据帧的平等性,除了 dtypes
- r - 检查向量的元素是否在矩阵给定的区间内
- maven - Jfrog Artifactory:如何删除旧的快照工件
- javascript - 如何仅在用户端重置本地存储一次?
- c# - 在属性中定义 LAMBDA 查询,以便可以重复使用
- python - 以编程方式阻止特定文件(.txt 扩展名)的打印请求?
- reactjs - 无法在未安装的组件上调用 setState