当前位置: 首页 > 编程日记 > 正文

如何用Python快速抓取Google搜索?

「免费学习 60+ 节公开课:投票页面,点击讲师头像」

作者 | linksc

译者 | 弯月,编辑 | 郭芮

来源 | CSDN(ID:CSDNnews)

自从2011年 Google Web Search API 被弃用以来,我一直在寻找其他的方法来抓取Google。我需要一种方法,让我的 Python 脚本从 Google 搜索中获取链接。于是,我自己想出了一种方法,而本文正是通过 requests 和 Beautiful Soup 抓取 Google 搜索的快速指南。

首先,让我们来安装一些依赖项。请将以下内容保存成文本文件 requirements.txt:

requests
bs4

接下来,运行 pip install -r requirements.txt 命令来安装依赖项。然后将其导入到你的脚本中。

import urllib
import requests
from bs4 import BeautifulSoup

为了执行搜索,你需要在URL中为 Google 提供查询参数。此外,所有空格都必须用+代替。为了构建URL,我们需要设置正确的查询格式,并其放入q参数中。

query = "hackernoon How To Scrape Google With Python"
query = query.replace(' ', '+')
URL = f"https://google.com/search?q={query}"

Google 会针对移动设备和台式机返回不同的搜索结果。因此,我们需要指定适当的用户代理。

# desktop user-agent
USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
# mobile user-agent
MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36"

发送请求很简单。但是,requests需要将 user-agent 放在请求的头部。为了设置正确的头部,我们必须传给headers一个字典。

headers = {"user-agent" : MOBILE_USER_AGENT}
resp = requests.get(URL, headers=headers)

接下来,我们需要检查请求是否成功。最简单的方法是检查状态码。如果返回200,则表示成功。然后,我们需要将其放入 Beautiful Soup 中以解析内容。

if resp.status_code == 200:soup = BeautifulSoup(resp.content, "html.parser")

接下来是解析数据,并从页面提取所有的链接。我们可以利用 Beautiful Soup 简单地完成这项工作。在便利每个链接时,我们需要将结果存储到一个列表中。

results = []
for g in soup.find_all('div', class_='r'):anchors = g.find_all('a')if anchors:link = anchors[0]['href']title = g.find('h3').textitem = {"title": title,"link": link}results.append(item)
print(results)

这样就可以了。这个脚本非常简单,而且容易出错。但至少它能带你入门,从此你就可以编写自己的 Google 爬虫了。你可以从 GitHub上下载整个脚本,地址是:

https://github.com/getlinksc/scrape_google

原文链接:

https://hackernoon.com/how-to-scrape-google-with-python-bo7d2tal

(*本文为AI科技大本营转载文章,转载请联系作者)

精彩推荐

点击阅读原文,或扫描文首贴片二维码

所有CSDN 用户都可参与投票和抽奖活动

加入福利群,每周还有精选学习资料、技术图书等福利发送

推荐阅读

  • 2019,不可错过的NLP“高光时刻”

  • 代替Mask R-CNN,BlendMask欲做实例预测任务的新基准?

  • 300多局点,数据接入量超过2TB/S,华为用AI优化数据中台 | BDTC 2019

  • 达摩院 2020 预测:感知智能的“天花板”和认知智能的“野望”

  • 十大新兴前端框架大盘点

  • 门限签名技术火了,它的硬核之处绝不仅仅是秘密共享……

  • 2020 年,陆奇 59 岁:我给 20、30、40 岁年轻人的建议

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

利用歌词插件 让WMP活起来

如果利用起这个歌词插件的话 是不是可以减少下载那么多播放器和每次更新的烦恼呢?因为WMP是系统自带的.可以下载的插件名称:Wa3 Music Engine 或者乐辞的歌词秀插件转载于:https://blog.51cto.com/david25/84211

Linux性能研究(总)

http://www.vpsee.com/2009/11/linux-system-performance-monitoring-introduction/ http://www.jb51.net/LINUXjishu/34607.html 公司有个测试服务器,上面跑了几个应用和一个DB。 DB被这个几个应用使用。 最近老是被挂掉。 CPU 使用率100%。 搞到最后大家都不能用。…

万字干货:如何从零开始构建企业级推荐系统?

「免费学习 60 节公开课:投票页面,点击讲师头像」作者丨gongyouliu编辑丨zandy来源 | 大数据与人工智能(ID: ai-big-data)最近几个月有很多人咨询作者怎么从零开始搭建工业级推荐系统,有做音视频的、有做新闻资讯的、有…

Mocha BSM基础架构管理——灵活的网络拓扑展现

业务需求与挑战企业的网络拓扑结构与设备时常变化,人工往往难以维护网络拓扑。尤其对于上千台设备的大型网络来说情况更为复杂。当用户网络设备大量增加后,网络结构异常复杂,用户的网络拓扑很难在一个屏幕上展现或者很难找到要查阅的网络拓扑…

服务器架设笔记——打通MySQL和Apache

在《服务器架设笔记——使用Apache插件解析简单请求》一文中,我们已经可以获取请求内容。这只是万里长征的第一步。因为一般来说,客户端向服务器发起请求,服务器会有着复杂的业务处理逻辑。举个例子,大部分客户端软件都有日志模块…

【Maven】maven的安装配置和ecplise结合

2. Maven的安装和配置 2.1. 安装 进入Maven官网的下载页面:http://maven.apache.org/download.cgi,如下图所示: 选择当前最新版本:“apache-maven-3.0.4-bin.zip”,下载到本地,解压缩到本地磁盘D:下。 2…

2020年趋势一览:AutoML、联邦学习、云寡头时代的终结

作者 | Roberto Sannazzaro,Ben Longstaff译者 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】在 2020 年来临之际,新年前夕往往是人们回顾过去一年并展望来年的好时机。本文将深入探讨了关于 AI 的技术和非技术方面的趋势&am…

使用C++实现一套简单的状态机模型——实例

一般来说,“状态机”是一种表达状态转换变换逻辑的方法。曾经有人和我讨论过为什么不直接用ifelse,而要使用“状态机”去实现一些逻辑,认为使用“状态机”是一种炫技的表现。然而对于大型复杂逻辑的变化和跳转,使用ifelse将带来代…

net通过oledb 和ibm自带连接方式,连接db2数据库出错

第一种通过ibm方式连接 DataSet ds new DataSet(); OleDbConnection cn new OleDbConnection( "ProviderIBMDA400.1;Data Source192.168.21.10;User IDb4dd;" "Passwordb4dd;Default CollectionQIBMPP"); …

SAP QM 'QM System' 有什么控制作用?

SAP QM ‘QM System’ 有什么控制作用? QM system可以控制如下二点: 1>如果我方与Vendor的质量标准匹配,且相互认证,那么我方收货后不用检验,系统不产生检验批;如果我方与vendor的质量标准匹配&#x…

使用C++实现一套简单的状态机模型——原理解析

在上一文中,我们介绍了该状态机模型的使用方法。通过例子,我们发现可以使用该模型快速构建满足基本业务需求的状态机。本文我们将解析该模型的基础代码,以便大家可以根据自己状态机特点进行修改。(转载请指明出于breaksoftware的c…

干货:NIST评测(SRE19)获胜团队声纹识别技术分析 | CSDN博文精选

作者 | xjdier来源 | CSDN博文精选(*点击阅读原文,查看作者更多精彩文章)近日,NIST说话人识别技术评测 (Speaker Recognition Evaluation,SRE)正式公布榜单,芯片初创公司清微智能和清华大学等机构组成的联队…

网络系统传输负载测试

网络系统传输负载测试 随着企业各种信息系统相继投入使用,生产、管理信息逐步增加,企业网络规模迅速扩大,信息城域网承受着空前的压力,网络带宽严重不足,网络系统传输丢包、设备死机情况频频发生。我们需要对网络状况做…

android圆形旋转菜单,而对于移动转换功能支持

LZ该公司最近接手一个项目,需要写一个圆形旋转菜单,和菜单之间的移动换位支持,我本来以为这样的demo如若互联网是非常。想想你妈妈也帮不了我,空旋转,但它不能改变位置,所以LZ我们只能靠自己摸索。 最后LZ参…

微信9年:张小龙指明方向,微信AI全面开放NLP能力

作者 | 夕颜责编 | 王金许出品 | AI科技大本营(ID:rgznai100)一年一度的微信公开课 Pro 在广州保利世贸博览馆如期举行。一大早,同在博览馆举办的广州年货促展会参会者,夹杂着参加腾讯公开课的与会者,让这里变得人流攒…

实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

在《使用WinHttp接口实现HTTP协议Get、Post和文件上传功能》一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议。在最近的代码梳理中,我觉得Post和文件上传模块可以得到简化,于是几乎重写了这两个功能的代码。因为Get、Post和文…

第一篇文章,做个纪念

第一篇文章,做个纪念,这个blog好吗?拭目以待!转载于:https://blog.51cto.com/197536/88241

Maven工程引入jar包(转)

Maven项目引入jar包的方法,希望能帮助有需要的朋友们 法一.手动导入:项目右键—>Build Path—>Configure Build Path—>选中Libraries—>点击Add External Jars—>选中已事先下好的Jar包导入即可。 法二.通过pom.xml文件的Dependencies标…

实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

之前我们已经详细介绍了WinHttp接口如何实现Http的相关功能。本文我将主要讲解如何使用libcurl库去实现相关功能。(转载请指明出于breaksoftware的csdn博客) libcurl在http://curl.haxx.se/libcurl/有详细的介绍,有兴趣的朋友可以去读下。本文…

32岁程序员,补偿N+2:“谢谢裁我,让我翻倍!” 网友:榜样!

2019年的冬天,“冷”的有些频繁。12月19日,《马蜂窝被曝裁员40% UGC模式变现难?》爆火,据悉马蜂窝将裁员40%,交易中心成了“重灾区”,赔偿N2,留下的除搜索推荐、内容中心等核心部门外&#xff0…

山有木兮木有枝,心悦君兮君不知

《越人歌》今夕何夕兮,搴舟中流。 今日何日兮,得与王子同舟 蒙羞被好兮,不訾诟耻 心几烦而不绝兮,得知王子 山有木兮木有枝,心悦君兮君不知。本是《夜宴》中的,"山有木兮木有枝,心悦君兮君…

浅析电商、社区、游戏常用的 MySQL 架构

一般、或者必须是这样、MySQL 架构一定要结合业务来分析、设计、优化 所以不管是那种架构、根据业务要求组合成符合需求的即是最好的、不能泛泛而谈 同时、也必须注意数据的安全(如ipsec,ssh,vpn传输) 常见的架构都是进行业务切…

基于Co-Attention和Co-Excitation的少样本目标检测 | NeurIPS 2019

「免费学习 60 节公开课:投票页面,点击讲师头像」作者 | VincentLee来源 | 晓飞的算法工程笔记(ID: gh_084c810bc839)导读:论文提出CoAE少样本目标检测算法,该算法使用non-local block来提取目标图片与查询…

服务器架设笔记——搭建用户注册和验证功能

之前介绍的Apache Httpd相关内容,都是些零散的知识点。而实际运用中,我们要根据不同的业务,将这些知识点连接起来以形成各种组合,来满足我们的需求。(转载请指明出于breaksoftware的csdn博客) 本文我将以用…

项目管理过程中应注意的问题

软件项目从角色分工方面可以划分为研发、开发和实施三类,每个类型的项目有各自的管理过程。下面笔者就公司实施类项目的经历,从项目经理的角度谈一谈实施类项目管理过程中应该注意的一些问题,希望大家共勉。确定项目概况俗话说:“…

原创jQuery移动设备弹出框插件——msgalert.js

最近开发经常会用到顶部弹出框,虽然有现成的(bootstrap等),但是都很臃肿,对于有些时候移动端活动页面有点大材小用。所以今晚花了20分钟写了一个通用的插件,我将其命名为msgalert.js。因为定位是jQuery插件&#xff0c…

AbutionGraph:构建以知识图谱为核心的下一代数据中台

「免费学习 60 节公开课:投票页面,点击讲师头像」作者 | 图特摩斯科技创始人闭雨哲出品 | AI科技大本营(ID:rgznai100)前言图特摩斯科技(Thutmose)基于自研的图形数据库AbutionGraph(实时多维数…

服务器架设笔记——多模块和全局数据

随着项目工程的发展,多模块设计和性能优化是在所难免的。本文我将基于一些现实中可能遇到的需求,讲解如何在Apache的Httpd插件体系中实现这些功能。(转载请指明出于breaksoftware的csdn博客) 之前我碰到两个需求: 需要…

JSP学习笔记(七):使用JavaBean

bean.java publicclassB1 { publicString getString() { return"content"; } }page.jsp <%B1 b1 newB1(); out.print(b1.getString());%>

折返(Reentrancy)VS线程安全(Thread safety)

在Wiki上&#xff0c;折返例如&#xff0c;下面的定义&#xff08;接&#xff09; In computing, a computer program or subroutine is called reentrant if it can be interrupted in the middle of its execution and then safely called again ("re-entered") be…