【问题标题】:how to get href link from onclick function in python如何从python中的onclick函数获取href链接
【发布时间】:2016-09-02 09:38:07
【问题描述】:

我想获取网站表单onclick功能的href链接 这是 html 代码,其中 onclick 函数调用网站

<div class="fl">
  <span class="taLnk" onclick="ta.trackEventOnPage('Eatery_Listing', 'Website', 594024, 1); ta.util.cookie.setPIDCookie(15190); ta.call('ta.util.link.targetBlank', event, this, {'aHref':'LqMWJQzZYUWJQpEcYGII26XombQQoqnQQQQoqnqgoqnQQQQoqnQQQQoqnQQQQoqnqgoqnQQQQoqnQQuuuQQoqnQQQQoqnxioqnQQQQoqnQQ2EisSMVCnVcJQQoqnQQQQoqnxioqnQQQQoqnQQniaQQoqnQQQQoqnqgoqnQQQQoqnQQWJQzhYMJkH3KHVAdJJH3VVdB', 'isAsdf':true})">Website</span> 
</div>

通常我使用此代码从任何跨度或元素获取 href 链接

geturl = soup.findsoup("span", {"class": "taLnk"})
for link in geturl:
  hreflink = link.get("href")
  print(hreflink)

但是这种情况下没有办法直接调用href,因为onclick函数中存在href

请帮我现在该怎么办

【问题讨论】:

  • 是否要提取位于aHref的数据
  • 是的,我想提取位于 aHref 中的数据。该数据包含网站链接。以及如何从这些数据中生成网站链接,如果可以的话请帮助我@akash karothiya
  • aHref 可以轻松提取的数据,使用 bs4regex
  • 请给我一些代码或示例如何做到这一点

标签: python html python-3.x beautifulsoup


【解决方案1】:

不能直接解析aHref属性,需要先提取onclick

>>> import re
>>> data = soup.select('.taLnk')[0].get('onclick')
>>> href = re.search(r"(?is)'aHref':'(.*?)'",str(data)).group(1)
'LqMWJQzZYUWJQpEcYGII26XombQQoqnQQQQoqnqgoqnQQQQoqnQQQQoqnQQQQoqnqgoqnQQQQoqnQQuuuQQoqnQQQQoqnxioqnQQQQoqnQQ2EisSMVCnVcJQQoqnQQQQoqnxioqnQQQQoqnQQniaQQoqnQQQQoqnqgoqnQQQQoqnQQWJQzhYMJkH3KHVAdJJH3VVdB'

【讨论】:

    【解决方案2】:

    您可以在 bs4 中使用正则表达式,选择具有类 taLnk 和以 ta.trackEventOnPage 开头的 onclick 属性的跨度:

    h = """<div class="fl">
      <span class="taLnk" onclick="ta.trackEventOnPage('Eatery_Listing', 'Website', 594024, 1); ta.util.cookie.setPIDCookie(15190); ta.call('ta.util.link.targetBlank', event, this, {'aHref':'LqMWJQzZYUWJQpEcYGII26XombQQoqnQQQQoqnqgoqnQQQQoqnQQQQoqnQQQQoqnqgoqnQQQQoqnQQuuuQQoqnQQQQoqnxioqnQQQQoqnQQ2EisSMVCnVcJQQoqnQQQQoqnxioqnQQQQoqnQQniaQQoqnQQQQoqnqgoqnQQQQoqnQQWJQzhYMJkH3KHVAdJJH3VVdB', 'isAsdf':true})">Website</span>
    </div>"""
    
    from bs4 import BeautifulSoup
    import re
    soup = BeautifulSoup(h)
    
    data = soup.select_one("span.taLnk[onclick^=ta.trackEventOnPage]")["onclick"]
    print(re.search("'aHref':'(.*?)'", data).group(1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      相关资源
      最近更新 更多