【问题标题】:How can I get link in href with specified class by using python [closed]如何使用python获取具有指定类的href链接[关闭]
【发布时间】:2018-09-08 03:27:18
【问题描述】:

以下是 html 详细信息:

<div class="aaa">
   <span class="bbb"></span>
      <a data-track-id="Google Map" href="https://www.google.com/maps/dir//18/@1813z" target="_blank" class="ccc">Google Map</a>
</div>

我只想获得 18 和 1813z 的纬度和经度,我该怎么做?

我正在使用两个 url 页面来获取第二页中的文本。标题或名称等其他信息以文本形式显示,因此我可以使用get_text().

但是在这种情况下,我无法获得href之后的链接。所以我请帮忙。

我试过的代码:

from bs4 import BeautifulSoup
import urllib.request

def get_page(url):
    request = urllib.request.Request(url)
    response = urllib.request.urlopen(request)
    mainpage = response.read().decode('utf-8')
    return mainpage

mainpage = get_page('https://www.something.com')
mainpage_parser = BeautifulSoup(mainpage,'html.parser')
secondpage = get_page('https://www.something2.com/')
secondpage_parser = BeautifulSoup(secondpage,'html.parser')

try:
     for gps in secondpage_parser.find_all('a',{"data-track-id":"Google Map"}, href=True): 
         gpslocation = gps['href'] 
     print(gpslocation) 
except:
     print(gpslocation) 

【问题讨论】:

  • 修正引号和缩进
  • 代码是怎么失败的?
  • @MadPhysicist 我已修复,谢谢,但我的代码仍然无法正常工作。它没有显示任何错误,但运行后没有出现任何文本或链接。
  • 你没有修复它。请编辑问题。
  • @MadPhysicist 谢谢提醒。但是我跑了之后还是什么都没有。

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


【解决方案1】:

首先页面是用 JavaScript 动态生成的,如果你打印 secondpage_parser 你会发现那一行

<a data-track-id="Google Map" href="https://www.google.com/maps/dir//18/@1813z" target="_blank" class="ccc">Google Map</a>

在原始源中不存在。你说你想要纬度和经度,你可以像这样从地图图像属性中得到:

from bs4 import BeautifulSoup
import urllib.request
from urllib.parse import urlparse, parse_qs

def get_page(url):
    request = urllib.request.Request(url)
    response = urllib.request.urlopen(request)
    mainpage = response.read().decode('utf-8')
    return mainpage

mainpage = get_page('https://www.wongnai.com/businesses?domain=1&page.number=1&sort.type=8&regions=373')
mainpage_parser = BeautifulSoup(mainpage,'html.parser')
secondpage = get_page('https://www.wongnai.com/restaurants/thebarnsteakhousechiangmai?_st=cD0wO2I9Mjc0MzU0O2FkPXRydWU7dD0xNTM2NDE4MzIxOTM1O2k9NDk3MWEyZGQtMDY5Mi00MDU2LWExZmUtZmE5Y2ZlMjVhODYwO3dyZWY9c3I7&wref=sr')
secondpage_parser = BeautifulSoup(secondpage,'html.parser')

try:
     for gps in secondpage_parser.find_all('img',{"alt":"map"}, srcset=True):
         parsed_url = urlparse(gps['srcset'])
         mykeys = ['lat', 'lon']
         gpslocation = [parse_qs(parsed_url.query)[k][0] for k in mykeys]
     print(gpslocation)
except:
     print(gpslocation)

输出:

['18.832687', '98.998473']

【讨论】:

  • 有效!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-23
  • 2017-02-14
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多