python - 如何使用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)
解决方案
首先页面是用 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®ions=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']
推荐阅读
- python - 快速合并两个嵌套字典,在字典中保留两个具有相同键的值
- angular - 在带有 Angular 6 的 ag-Grid 18.0 中的 cellValueChanged 事件之后设置对已编辑列的排序
- html - 未捕获的错误 - TypeError:data.forEach 不是函数(csv 文件)
- c - char[n][100] 是什么意思?
- dart - Flutter - 无法在 Transform.scale 小部件上保持缩放
- javafx - AudioSpectrumListener 中的波段代表什么?
- android - 如何使用 Kotlin 在 android 中禁用屏幕录制?
- php - php 删除数组索引 where index > [number]
- angular - 以角度更新 Cloud Firestore 中的特定产品
- c# - 方法接受三个布尔参数并基于这些布尔值返回字符串 C#