从“弹出”框下的网页抓取数据

时间:2017-12-09 23:07:37

标签: python-3.x web-scraping beautifulsoup

我正在尝试从网站上抓取数据。问题是数据仅在鼠标指针悬停在数据上时才可见... 在接下来的页面中,我想提取历史拥堵程度(右下角,例如鼠标在2011年) https://www.tomtom.com/en_gb/trafficindex/city/mexico-city

我对美丽的汤有点熟悉。关于如何解决这个问题的任何想法,如果可能的话......

非常感谢和抱歉这个高级别的问题,但我想在深入研究之前检查可行性。

1 个答案:

答案 0 :(得分:1)

我认为这里最好的方法是直接请求json文件(/en_gb/trafficindex/data.json) 该文件包含390个项目的列表,每个城市一个。您可以使用' cityCode'从此列表创建字典。作为密钥和拥塞历史记录'作为值,并按城市代码访问数据。

requests的示例:

import requests

url = "https://www.tomtom.com/en_gb/trafficindex/data.json"
r = requests.get(url)
data = r.json()
congestion_data = {
    i['cityTraffic']['cityCode']: i['cityTraffic']['congestionHistory'] 
    for i in data
}

print(congestion_data['MEX'])
  

[{'年':2010年,'拥挤':}},{'年':2011年,'拥挤':59 },...

将其保存为csv文件:

import csv

with open('my_file.csv', 'w', newline='') as f: 
    w = csv.writer(f)
    w.writerow(['city_code', 'congestion_history'])
    for k,v in congestion_data.items():
        w.writerow((k, ', '.join('{1}:{0}'.format(*i.values()) for i in v)))