【问题标题】:Extract all links from a page in Python从 Python 中的页面中提取所有链接
【发布时间】:2017-07-12 22:24:46
【问题描述】:

我希望从网页中提取所有链接。我之前使用的过程是提取“href”选项,例如:

 from bs4 import BeautifulSoup
 soup = BeautifulSoup(html_text, "lxml")
 for a in soup.findAll("a"):
     print (a["href"])

但有些链接有onclick 属性而不是使用href

例如:

   <a href="#" onclick="window.open('link_to_open_was_here', '', 'height=400,width=600'); return false;" title="..." style="..." target="_blank">...</span></a>

菜单栏中的其他链接是使用 javascript 的 window.open 选项构建的。

我可能会编写代码来识别不使用 href 属性的方式,但有没有更简单/更标准的方式从 html 页面中提取所有链接?

跟进:

我对提取“a”标签中不属于标准“href”属性的链接的方法特别感兴趣,这些链接很容易提取(例如,我想提取通过 window.open() 包含的链接或 javascript... 或在页面上包含链接的其他方式)。相关地,由于网站上的大多数链接都是相对的,因此在页面上查找以 http 开头的文本并不会全部捕获它们。

【问题讨论】:

  • 对不起,我误读了这个问题。 Bs4 不是为解析 js 而设计的,所以我认为没有一种简单的方法可以得到结果。作为“hacky”解决方案,您可以将正则表达式用于具有“onclick”属性的链接。

标签: python python-3.x beautifulsoup


【解决方案1】:

我能想到获取所有内容的唯一方法是将整个汤结果转换为字符串并使用正则表达式使用http 获取所有内容:

soup = str(soup)

links = re.findall(r'(http.*?)"', soup)

【讨论】:

  • 该解决方案可能会丢失相关链接并包含一些不需要的链接到 js 或 css 文件。限制为 内容可能已经排除了第二个缺点。
  • 也许,但在这种情况下没有“不需要的”链接,因为问题是从页面中提取“所有”链接,至少在当前制定问题时是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 2023-03-30
  • 2014-01-10
  • 2023-04-02
  • 2020-02-29
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多