【问题标题】:Beautiful Soup, conditionally extracting HrefBeautiful Soup,有条件地提取 Href
【发布时间】:2021-07-27 02:07:28
【问题描述】:

从给定的网页选择中,我试图从表格中提取链接,条件是“文档类型”信息是特定的。例如,在这个网站上,如果文档类型是“技术援助报告”,我只想获取 Href。

当我使用谷歌检查它时,我看到了这个:

但是当我使用 BeautifulSoup 时,我可以找到 Href,但我找不到“技术援助报告”的文字。

import requests
url2 = "https://www.adb.org/projects/54128-001/main#project-documents"
response = requests.get(url2)
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text)
#print(soup.prettify())
parent = soup.find_all('tr')
parent[1].find_all('td')

我明白了:

[<td>
 <a href="/projects/documents/reg-54128-001-tar">Implementing the Cities Development Initiative for Asia: Technical Assistance Report</a> </td>,
 <td class="width-2-12 views-field views-field-field-date-content">
 <span class="date-display-single" content="2020-09-30T00:00:00+08:00" datatype="xsd:dateTime" property="">Sep 2020</span> </td>]

有 Href 和日期,但我找不到“技术援助报告”文本。中间的“td”没有出现。

本示例仅列出网页上的一个文档,但其他示例可能有很多或没有。理想情况下,我希望能够遍历所有“tr”,并且仅在文档类型为“技术援助报告”或我正在寻找的其他内容时才获取 Href。我在这里做错了什么以及实现此目的的好方法是什么?

【问题讨论】:

  • 文档类型可能是动态生成的。您可以尝试使用 Selenium 检索 html。
  • @MendelG 请回复您的答案。只需更新有关请求的信息。这是一个很好的答案。展示两种获取方式并没有什么坏处。我应该这样表达我的评论。
  • @MendelG 请转发。你的回答非常好。谢谢。

标签: python beautifulsoup


【解决方案1】:

您可以从中获取站点地图并仅 glob tar 文件。

https://www.adb.org/sitemap.xml?page=1

【讨论】:

  • 天啊!我什至不知道站点地图是什么。谢谢!
  • 我最初的解决方案是逐页浏览并选择其中带有“-tar”的链接,但后来我意识到命名不一致,并且有很多文件是实际的技术援助报告(如文档类型下所述)但他们的链接没有“-tar”。这就是为什么我试图在第二种方法中阅读表格的那部分。
猜你喜欢
  • 2011-11-03
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2022-10-15
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多