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

2023-11-01

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

Python 知识点
Web­Browser、Re­quests、Beau­ti­ful­Soup 模块的基本操作。

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

从参数列表中获取关键词;
进行百度搜索并下载搜索页面;
得到前 5 个搜索结果的链接;
在浏览器中打开这些连接。
在开始编写代码之前,确保已经安装必需的库:webbrowser、requests、bs4。本文代码测试环境为 Windows 上的 Python 3.7.0。
本文地址: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)到最后一个参数,并保存在变量 key­words 中。

下载搜索页面
构造搜索 URL
百度搜索的 URL 格式为 https://www.baidu.com/s?wd=<关键词>,只需将其与 key­words 变量连接就好了。

伪装 User-Agent
百度会拒绝 Python re­quests 库直接发起的请求,并返回一个跳转页面。因此我们必须将 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
下载页面
使用 re­quests 库,用上面伪装的 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: 在浏览器中打开这些连接

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

用百度搜索任意内容,并在一条结果上点击右键并点击【检查】(不同浏览器略有不同,此处以 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: 在浏览器中打开这些连接

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

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

在一个循环中依次调用 web­browser 的 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 个搜索结果,然后在浏览器中打开它们。成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 Python 进行百度搜索,并自动打开前 5 个结果 的相关文章

  • SQLAlchemy:检查给定值是否在列表中

    问题 在 PostgreSQL 中 检查某个字段是否在给定列表中是使用IN操作员 SELECT FROM stars WHERE star type IN Nova Planet SQLAlchemy 的等价物是什么INSQL查询 我尝试过
  • 如何充分释放函数中使用的GPU内存

    我在用着cupy在接收一个函数numpy数组 将其推到 GPU 上 对其进行一些操作并返回cp asnumpy它的副本 问题 函数执行后内存没有被释放 如ndidia smi 我知道内存的缓存和重用cupy 但是 这似乎仅适用于每个用户 当
  • 来自数据框 groupby 的条形图

    import pandas as pd import numpy as np import matplotlib pyplot as plt df pd read csv arrests csv df df replace np nan 0
  • 如何在返回的 AJAX 调用上使用 django 模板标签?

    我有一个简单的 AJAX 脚本 它在名为的搜索字段中获取输入的字符串AJAXBox并调用一个视图函数 该函数使用过滤器查询数据库并返回与输入参数匹配的所有 User 对象的查询集 当我使用 django 模板标签迭代查询集时 它不起作用 我
  • 如何清除画布元素中的多边形区域?

    我使用过clearRect函数 但没有看到多边形的等效函数 我天真地尝试过 ctx fillStyle transparent ctx beginPath ctx moveTo 0 0 ctx lineTo 100 50 ctx lineT
  • 如何在html中创建字体选择栏

    我想创建一个下拉菜单 在其中我们可以看到所有可用的字体 并且可以选择我们选择的任何字体 我还想创建一个字体颜色选择小部件 存在大量的字体样式 我想知道如何获取所有这些字体以及如何创建一个小部件 用户可以使用该小部件选择他选择的颜色 为了创建
  • 使用 CSS 等高列

    我想对我的 CSS 表使用百分比 不幸的是 它对我不起作用 这段代码有什么问题 我应该使用 flexbox 而不是 table 吗 我想使用表格 因为我想要相同高度的列 ul list style none margin 0 display
  • 直接打开Spyder还是通过Pythonxy打开?

    之前 我一直在运行PythonSpyder 我总是开始Spyder直接双击其图标 今天突然发现我还有一个东西叫Python x y 我注意到我也可以开始Spyder通过它 这两种方法有什么区别吗 如果不是的话 有什么意义Python x y
  • 将查询参数添加到 URL

    我正在尝试自动从网站下载数据 我需要将动态参数传递到每天更改的站点 html 的结构是表格而不是表单 如何传递参数并从 url 获取结果 这是我尝试过的 它需要在 python 2 7 中 import urllib url https d
  • 将 for 循环替换为 pyspark 中的并行进程

    我在脚本中使用 for 循环来为 size DF 数据帧 的每个元素调用函数 但这需要很多时间 我尝试通过地图删除 for 循环 但没有得到任何输出 size DF 是我从表中获取的大约 300 个元素的列表 用于 import call
  • Bottle 是否可以处理没有并发的请求?

    起初 我认为 Bottle 会并发处理请求 所以我编写了如下测试代码 import json from bottle import Bottle run request response get post import time app B
  • 为什么 html 中的 AngularJS 错误没有显示在控制台中?

    Here s a fiddle http jsfiddle net 6y7odxmj 3 用于说明 当 ng click 指令 例如 调用未在控制器的 scope 或其父级 上定义的函数时 它会默默地失败 当我尝试调试网页时 这种行为令人抓
  • 如何使用 JS/Puppeteer 上传文件

    我试图弄清楚如何将图片文件上传到输入对话框中 不可能只输入名称并按 Enter 键 因为我没有找到使用 Puppeteer 实现自动化的方法 我想我必须设置一些值作为图片 但我不知道该怎么做 有任何想法吗 您使用上传文件elementHan
  • 验证动态添加的输入字段

    我用过this http docs jquery com Plugins Validation以下表单的 jquery 验证插件
  • 当用户输入/删除时,使文本字段中的提示消失/重新出现[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有谁知道我怎样才能在我的搜索栏中做出
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 如何使用 Ajax 在 Flask 中发布按钮值而不刷新页面?

    我有一个问题 当我单击 Flask 应用程序中的按钮时 我想避免重新加载 我知道有 Ajax 解决方案 但我想知道如何将我的按钮链接到 ajax 函数以发布按钮值并运行链接到其值的 python 函数 这是我的 html 按钮 div di
  • Python中的MariaDB连接器无法连接到远程服务器

    我使用与远程 Mariadb 服务器的连接已有几个月了 今天 无法再通过 macOS 上的 python mariadb 模块和 mariadb 连接器建立连接 基本安装如下 brew install mariadb connector c
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节

随机推荐

  • python opencv旋转,Python OpenCV cv2.rotate()用法及代码示例

    OpenCV Python是旨在解决计算机视觉问题的Python绑定库 cv2 rotate 方法用于将2D数组旋转90度的倍数 函数cv rotate以三种不同的方式旋转数组 用法 cv2 cv rotate src rotateCode
  • Pandas 三大对象

    1 pandas的Series对象 pandas的Series对象是一个带索引数据构成的一维数组 可以用一个数组创建Series对象 import pandas as pd data pd Series 0 25 0 5 0 75 1 0
  • 为你的嵌入式设计选择合适的低功耗处理器

    在早期 获得低功耗的CPU通常意味着牺牲功能 以降低的时钟速度运行或等待新的低功耗处理技术以降低待机 和有功功耗 无论如何 情况已不再如此 并且处理器领域已经发生了戏剧性的变化 随着处理技术的进步以及创新的芯片设计和高粒度电源管理软件 带来
  • Python2.7.16安装(Ubuntu16.04)

    Python2 7 16安装 Ubuntu16 04 前面的文章已经介绍了在Windows上安装Python2和Python3了 现在介绍Linux系统上的安装 Ubuntu16 04上默认安装了Python2 7和Python3 5 Re
  • HTML 文件中引入高德地图

    准备工作 1 在高德开放平台 注册开发者账号 2 登陆之后 进入 应用管理 点击 我的应用 选择右上角 创建新应用 3 为应用添加 Key 在 服务平台 一项选择 Web 端 JSAPI 页面实现 1 创建一个div 作为地图的容器 2 设
  • Week2:包含 min 函数的栈

    1 题目描述 定义栈的数据结构 请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中 调用 min push 及 pop 的时间复杂度都是 O 1 示例 MinStack minStack new MinStack minSta
  • Vue下OpenLayers中Style-Icon的图片路径

    OpenLayers加载图片的方式 1 使用 require 方式加载图片 图片路径 根目录 src assets let styles icon new Style image new Icon anchor 0 5 1 src requ
  • 解决阿里云无法正常使用samba的问题

    昨天在阿里云上申请了一个云服务器 系统用的是ubuntu14 04 由于是免费的 初次使用 配置较低 单核1G内存 40G硬盘 所以在服务器上不方便安装图形界面 默认的系统镜像是没有桌面系统的 毕竟只是服务器 没有图形界面总觉得不是很方便
  • TensorFlow2.0学习笔记-3.模型训练

    3 模型训练 3 1 Keras版本模型训练 构建模型 顺序模型 函数式模型 子类模型 模型训练 model fit 模型验证 model evaluate 模型预测 model predict 使用样本加权和类别加权 回调函数 Model
  • 二叉树树叶与度为2的节点数关系论证

    如果二叉树树叶总数为n0 度为2的节点总数为n2 那么有n0 n2 1 下面论证这一关系 假设树叶总数为0 度为1的节点总数为n1 度为二的节点总数为n2 那么二叉树总结点数n满足以下关系 n n0 n1 n2 另一方面 除根节点以外的所有
  • CentOS下7zip包的解压、压缩方法

    1 安装7z 1 直接安装 yum install p7zip 2 源代码下载编译 wget http sourceforge net projects p7zip 9 13 p7zip 9 13 src all tar bz2 downl
  • ESP32通过UART串口使用AT指令

    ESP32通过UART串口使用AT指令 MCU起航 mcublog cn ESP32通过UART串口使用AT指令 MCU起航 mcublog cn
  • Unity基于NGUI点击事件向下传递的解决方法

    Unity开发中经常有点击Button 弹窗提示界面 然后点击任意区域关闭提示界面并且提示界面下一层的事件依然可以触发 需要点击事件向下传递 UGUI对此支持相对好处理 NGUI本身对此支持不好 这里提供一个方法 public class
  • 使用IDM下载视频出现“由于法律原因,IDM无法下载...

    一 问题描述 由于法律原因 IDM无法下载 如图 二 原因分析 下载该IDM抓取的M3U8文件 查看其中的内容发现 EXT X KEY 字段已经写明了加密方式是AES 128 包含一个URI和IV值 EXTM3U EXT X VERSION
  • SQL批处理

    转载自http www cnblogs com kissdodog archive 2013 06 30 3163880 html 批处理简介 批处理是作为一个逻辑单元的T SQL语句 如果一条语句不能通过语法分析 那么不会运行任何语句 如
  • docker超快速安装redis(以配置文件启动)附上几个坑

    docker超快速安装redis 以配置文件启动 附上几个坑 1 下载好Xshell和Xftp 下载地址 只需要填写一个真实邮箱即可 2 创建目录 在user下 在别的目录需要管理员权限 选择用户下面的一个文件 创建redis文件夹 再创建
  • The Ultimate Guide to Python Type Checking

    In this guide you will get a look into Python type checking Traditionally types have been handled by the Python interpre
  • 物联网 单片机 嵌入式毕业设计题目 - 350例

    文章目录 1前言 2 如何选题 2 1 不要给自己挖坑 2 2 难度把控 2 3 如何命名题目 3 单片机 嵌入式 选题大全 3 1 嵌入式方向 3 2 算法方向 3 3 移动通信方向 3 4 学长作品展示 最后 1前言 近期不少学弟学妹询
  • NeRF代码学习

    学习nerf pytorch项目代码 以及pytorch lighting形式代码 首先需要读取数据 将数据输入神经网络进行训练 包括生成编码 生成光线 计算密度颜色 体渲染步骤 将数据输出 1 数据集读取 代码中给出的样例 是读取Blen
  • 用 Python 进行百度搜索,并自动打开前 5 个结果

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