python - 无法解析网页中的网站链接
问题描述
我用 selenium 在 python 中创建了一个脚本来抓取位于网站Contact details
中的网站地址。但是,问题是没有与该链接关联的 url(不过我可以单击该链接)。
如何解析位于其中的网站链接
Contact details
?
from selenium import webdriver
URL = 'https://www.truelocal.com.au/business/vitfit/sydney'
def get_website_link(driver,link):
driver.get(link)
website = driver.find_element_by_css_selector("[ng-class*='getHaveSecondaryWebsites'] > span").text
print(website)
if __name__ == '__main__':
driver = webdriver.Chrome()
try:
get_website_link(driver,URL)
finally:
driver.quit()
当我运行脚本时,我得到与该链接关联的可见文本,即Visit website
.
解决方案
带有“访问网站”文本的元素是 a span
,它有vm.openLink(vm.getReadableUrl(vm.getPrimaryWebsite()),'_blank')
javascript 而不是实际的 href。我的建议,如果你的目标是抓取而不是测试,你可以使用下面的解决方案和requests
包来获取数据作为 json 并提取你需要的任何信息。
另一个实际上是单击,就像您所做的那样。
import requests
import re
headers = {
'Referer': 'https://www.truelocal.com.au/business/vitfit/sydney',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/73.0.3683.75 Safari/537.36',
'DNT': '1',
}
response = requests.get('https://www.truelocal.com.au/www-js/configuration.constant.js?v=1552032205066',
headers=headers)
assert response.ok
# extract token from response text
token = re.search("token:\\s'(.*)'", response.text)[1]
headers['Accept'] = 'application/json, text/plain, */*'
headers['Origin'] = 'https://www.truelocal.com.au'
response = requests.get(f'https://api.truelocal.com.au/rest/listings/vitfit/sydney?&passToken={token}', headers=headers)
assert response.ok
# use response.text to get full json as text and see what information can be extracted.
contact = response.json()["data"]["listing"][0]["contacts"]["contact"]
website = list(filter(lambda x: x["type"] == "website", contact))[0]["value"]
print(website)
print("the end")
推荐阅读
- mongodb - 无法从 dockerized ASP.NET Core 3.1 容器查询 dockerized MongoDB 容器
- amazon-web-services - aws eks 创建集群错误 - us-east-1e 当前没有足够的容量来支持集群
- java - 在返回空指针异常的 trie 中搜索键
- android - Android:加载 Fragment 从 SQLite 获取字符串值很慢
- git - 在 git commit 中将时区更改为 +08:00
- javascript - 是否可以覆盖 Function.prototype.toJSON 以便 JSON.stringify 可以使用函数?
- css - 使用 flexbox 垂直居中元素是一种好习惯吗?
- asp.net-core - 具有物理根目录“”的应用程序“/LM/W3SVC/1/ROOT/”无法加载 clr 和托管应用程序
- r - 提取单词中的元音并添加元音的值 R 编程 数据科学
- sql - 选择受 1:1 关系影响的人