【问题标题】:Have a Key Error on Web-Scraping by using Python使用 Python 在 Web-Scraping 上遇到关键错误
【发布时间】:2018-09-13 07:08:48
【问题描述】:

我正在尝试获取数据并导出到 CSV,我有主 URL 页面和第二个 URL 主页面。 现在我正在尝试从这个 html 类中获取“18.111”和“98.111”:

<img class="aaa" alt="map" data-track-id="static-map" width="97" height="142" src="https://websitewithdetailsD&amp;width=194&amp;height=284&amp;lat=18.111&amp;lon=98.111&amp;level=15&amp;returnImage=true">

我的代码是什么

for gps in secondpage_parser.find_all('img',{"class":"aaa"}, src=True):
     parsed_url = urlparse(gps['src'])
     mykeys = ['lat', 'lon']
     gpslocation = [parse_qs(parsed_url.query)[k][0] for k in mykeys]
print(gpslocation)

但是,它的行上有 Key 错误 “gpslocation = [parse_qs(parsed_url.query)[k][0] for k in mykeys]” 当我跑的时候。

Name 和 Title 作为 html 类工作的其他部分的数据并不太复杂。 我想知道我在这里的哪个部分有错误或者我应该如何解决它。 请帮忙。

【问题讨论】:

  • 网址格式不正确。它没有顶级域名。
  • @MoonsikPark 我对 Python 和网络抓取很陌生。能否请您解释一下有关 tld 的更多信息?
  • src="https://websitewithdetailsD&amp;amp;width=194&amp;amp;height=284&amp;amp;lat=18.111&amp;amp;lon=98.111&amp;amp;level=15&amp;amp;returnImage=true" parse_qs 无法检测到 url,因为它没有 .com .net 之类的 tld。
  • 真的很抱歉,我缩短了网址。这是完整的 url:api.nostramap.com/Service/V2/MoreContent/… 它在 html 类中指示,但是当我访问真实的网络时,它是另一个可以访问的,即 map.nostramap.com/NostraMap/?place/…
  • 你的问题不够清楚。

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


【解决方案1】:

你可以简单地使用 split & replace 来做到这一点,如下所示:

def get_lat_lon(tag):
    for key_value in tag.split('src')[1].split(';'):
        if 'lat' in key_value:
            lat = key_value.split('=')[1].replace('&amp','')
        if 'lon' in key_value:
            lon = key_value.split('=')[1].replace('&amp','')
    return lat, lon

lat,lon = get_lat_lon("""<img class="aaa" alt="map" data-track-id="static-map" width="97" height="142" src="https://websitewithdetailsD&amp;width=194&amp;height=284&amp;lat=18.111&amp;lon=98.111&amp;level=15&amp;returnImage=true">"""
)
print 'lat: ' + lat
print 'lon: ' + lon

【讨论】:

  • 谢谢。我对 python 和这个很陌生。它在“def get_lat_lon(tag)”上的 SyntaxError(无效语法)有一些问题我不确定是否是我的错误,我把它放在了错误的地方。因为,我正在从网站的多个页面中提取数据,我怎么能将格式转换为不在 python 代码中指定每个 url? (例如,仅指明班级)
  • 我不确定我是否提供了您可能需要的所有信息。如果您希望我添加更多内容,请告诉我。这里:docs.google.com/document/d/…
  • 您需要从包含return的行之后的行中删除所有缩进。
  • 我已经更新了信息。请再次检查我给定的链接。
  • 工作表的更新图像在谷歌文档的第二页。如果我没听错的话,你的意思是我把Return下面的所有行都去掉缩进?
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多