用 Python 进行百度搜索,并自动打开前 5 个结果 您所在的位置:网站首页 Python调用搜索引擎 用 Python 进行百度搜索,并自动打开前 5 个结果

用 Python 进行百度搜索,并自动打开前 5 个结果

2023-07-22 03:32| 来源: 网络整理| 查看: 265

写在前面情景介绍

在使用搜索引擎的时候,除非目的非常明确,我都会用鼠标中键连续在新选项卡中打开好几个页面,然后再逐一查看。本文编写 Python 脚本,使得这个过程自动化。也就是,给定搜索关键词进行百度搜索,挑出搜索结果的前 5 条,然后在浏览器中打开它们。

Python 知识点

WebBrowser、Requests、BeautifulSoup 模块的基本操作。

概述

首先梳理程序要执行的步骤。

从参数列表中获取关键词;进行百度搜索并下载搜索页面;得到前 5 个搜索结果的链接;在浏览器中打开这些连接。在开始编写代码之前,确保已经安装必需的库:webbrowser、requests、bs4。本文代码测试环境为 Windows 上的 Python 3.7.0。本文地址:https://www.jeddd.com/article/python-search-and-auto-open.html

本文地址:https://www.jeddd.com/article/python-search-and-auto-open.html

获取关键词

要从参数列表中获取内容,要用到sys.argv。由于搜索的关键词可能由多个单词组成,因此要用空格连接它们成为一个长字符串。代码如下:

import sys, webbrowser, requests, bs4 # 从参数列表中获取关键词 keywords = '%20'.join(sys.argv[1:]) # TODO 2: 进行百度搜索并下载搜索页面 # TODO 3: 得到前5个搜索结果的链接 # TODO 4: 在浏览器中打开这些连接

注意:%20 是空格的 URL 编码。以上代码使用空格连接第 2 个(下标为 1)到最后一个参数,并保存在变量 keywords 中。

下载搜索页面构造搜索 URL

百度搜索的 URL 格式为 https://www.baidu.com/s?wd=,只需将其与 keywords 变量连接就好了。

伪装 User-Agent

百度会拒绝 Python requests 库直接发起的请求,并返回一个跳转页面。因此我们必须将 UA 伪装成一个普通用户的浏览器,用下面这个 Chrome 的 UA 就可以了:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36下载页面

使用 requests 库,用上面伪装的 UA 向构造好的百度搜索 URL 发起 get 请求就可以下载得到搜索页面了。代码如下:

import sys, webbrowser, requests, bs4 # 从参数列表中获取关键词 keywords = '%20'.join(sys.argv[1:]) # 进行百度搜索并下载搜索页面 fakeua = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"} searchPage = requests.get('https://www.baidu.com/s?wd=' + keywords, headers = fakeua) searchPage.raise_for_status() # 如果失败就抛出异常 # TODO 3: 得到前5个搜索结果的链接 # TODO 4: 在浏览器中打开这些连接

 

得到结果链接

要用 BeautifulSoup 选择搜索页面上的结果链接,必须知道百度搜索结果链接的格式,这就要用到浏览器的开发者工具了。

用百度搜索任意内容,并在一条结果上点击右键并点击【检查】(不同浏览器略有不同,此处以 Chrome 为例),观察到百度搜索结果的链接都是标签中的标签,而且标签均有一个名为 t 的类。

你不需要知道 t 类是什么意思,只需要将它作为一个标记,查找我们需要的元素即可。

好的,现在我们知道了想要的链接位于 t 类内的标签,其 href 属性就是最后要打开的页面链接!

这部分的代码如下:

import sys, webbrowser, requests, bs4 # 从参数列表中获取关键词 keywords = '%20'.join(sys.argv[1:]) # 进行百度搜索并下载搜索页面 fakeua = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"} searchPage = requests.get('https://www.baidu.com/s?wd=' + keywords, headers = fakeua) searchPage.raise_for_status() # 如果失败就抛出异常 # 得到前5个搜索结果的链接 searchSoup = bs4.BeautifulSoup(searchPage.text, features="html.parser") elements = searchSoup.select('.t a') # TODO 4: 在浏览器中打开这些连接

 

本文地址:https://www.jeddd.com/article/python-search-and-auto-open.html

在浏览器中打开

接下来要找到前 5 个搜索结果的链接,并在浏览器中打开它们。当然,如果你输入的关键词过于生僻,以至于搜索结果不到 5 个,那么就应该取搜索结果的数量。综上,要打开的页面数为 5 和结果总数的最小值。

在上一步中,我们已经找到了搜索结果的标签,而标签的 href 属性的值就是要打开的链接。(由于百度做了混淆,这并不是原始链接,不过没关系,会正常跳转的,不影响打开页面)

在一个循环中依次调用 webbrowser 的 open 方法即可在系统默认浏览器中打开这些链接。最终完整代码如下:

import sys, webbrowser, requests, bs4 # 从参数列表中获取关键词 keywords = '%20'.join(sys.argv[1:]) # 进行百度搜索并下载搜索页面 fakeua = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"} searchPage = requests.get('https://www.baidu.com/s?wd=' + keywords, headers = fakeua) searchPage.raise_for_status() # 如果失败就抛出异常 # 得到前5个搜索结果的链接 searchSoup = bs4.BeautifulSoup(searchPage.text, features="html.parser") elements = searchSoup.select('.t a') # 在浏览器中打开这些连接 for i in range(min(5, len(elements))): webbrowser.open(elements[i].get('href'))本文地址:https://www.jeddd.com/article/python-search-and-auto-open.html代码测试

将上述代码保存为 search.py,然后打开命令行,执行:

python search.py linux git

该脚本以“linux git”为关键词在百度搜索,取得前 5 个搜索结果,然后在浏览器中打开它们。成功!

 

写在后面

本文中的思路可以用到 Google 等其它引擎上,甚至也能用到京东等电商网站上。编写这类小脚本的宗旨就是把经常操作的动作给封装起来,减少重复动作。当然了,这个脚本只是实现了最基础的功能,它还可以更加完善。

References《Python 编程快速上手——让繁琐工作自动化》第 11 章题图来自https://www.makeuseof.com/tag/python-programming-faq/

本文地址:https://www.jeddd.com/article/python-search-and-auto-open.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有