网页 table 中的最后一个超链接使用 Python

Last hyperlink in webpage table using Python

我正在使用 Beautifulsoup4 解析网页。与 Bing 的工作方式类似,如果您输入搜索词,它会 return 前十次点击,随后的点击将在第 2 页、第 3 页等后续页面上列出... 第一页 returned 在查询确实包含从第 2 页到最后一页的 hyperlinks 之后。例如,我要确定的正是最后一页的内容(即第 87 页)。

下面是来自页面的 HTML 源代码示例:

<tr><td colspan=4 align=left class='uilt'>����� ������� ��������: 3543.<br>��������: 1 <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=2">2</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=3">3</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=4">4</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=5">5</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=6">6</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=7">7</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=8">8</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=9">9</a> <a href="/main/search.php?str=&tag=&nopass=&cat=25&page=10">10</a> <br></td></tr>

在上面的示例中,我如何计算出最后一个 link 是第 10 页?在上面还有 HTML,所以我不能简单地从 HTML 代码的末尾切出 X 个位置。

谢谢

使用原始 Selenium,您应该能够执行如下操作:

driver.find_elements_by_css_selector(".uilt a")[-1].text

这将找到最后一个 <a> 标记,它是具有 class uilt 和 return 文本的元素的后代。不需要 BeautifulSoup.

首先手动搜索 html 以获取 link 的计数。您也许可以将那个数字 link 直接抓到最后一页。如果您无法通过这种方式找到最后一页,则可以从每个搜索结果页面的最后一页开始抓取。只需遍历所有 link 页 {1...10, 11...20,...} 直到到达最后一页,然后执行操作以找到该页的最后一个 link页。

如果您询问如何使用 BeautifulSoup 在提供的 HTML 中找到最后一个 link - 您可以使用 CSS Selector:

soup.select('td.uilt > a')[-1]

或者,使用 find()find_all()

soup.find('td', class_='uilt').find_all('a')[-1]

不过,我同意该主题的其他参与者的观点,即没有必要 BeautifulSoupSelenium本身就是一个强大的工具,有很多techniques to locate elements on a page.