23-第2步_找到所有的结果
第2步:找到所有的结果
现在你需要使用 Beautiful Soup
从下载的HTML中提取排名靠前的查询结果链接。但如何知道完成这项工作需要怎样的选择器呢?例如,你不能只查找所有的 <a>
标签,因为在这个HTML中,有许多链接你是不关心的,所以必须用浏览器的开发者工具来检查这个查询结果页面,尝试寻找一个选择器,它将挑选出你想要的链接。
在针对Beautiful Soup进行查询后,你可以打开浏览器的开发者工具,查看该页面上的一些链接元素。它们看起来很复杂,大概像这样: <a class="package-snippet" href="HYPERLINK "view-source:https://**/project/xml-parser/"/project/xml-parser/">。
该元素看起来复杂得难以置信,但这没有关系,只需要找到查询结果链接都具有的模式即可。
确保你的代码看起来像这样:
#! python3
# searchpypi.py - Opens several google results.
import requests, sys, webbrowser, bs4
--snip--
# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Open a browser tab for each result.
linkElems = soup.select('.package-snippet')
但是,如果查看 <a>
元素,你就会发现结果链接都有 class="package-snippet"
。查看余下的HTML源代码,看起来 package-snippet
类仅用于查询结果链接。你不需要知道CSS类 package-snippet
是什么,或者它会做什么。只需要利用它作为一个标记,查找你需要的 <a>
元素。可以通过下载页面的HTML文本创建一个 BeautifulSoup
对象,然后用选择器 '.package-snippet'
找到所有具有CSS类 package-snippet
的元素中的 <a>
元素。请注意,如果PyPI网站改变了布局,那么你可能需要更新这个程序,方法是将一个新的CSS选择器字符串传递给 soup.select()
。程序的其余部分仍将适用。