首页 > 解决方案 > 如何使用python获取具有指定类的href链接

问题描述

这是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) 

标签: pythonpython-3.xweb-scrapingbeautifulsoupjupyter-notebook

解决方案


首先页面是用 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']

推荐阅读