前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童鞋不要再走弯路。

1. 搜索引擎的选取

选择一个好的搜索引擎意味着你能够得到更准确的搜索结果。我用过的搜索引擎有四种:Google、Bing、Baidu、Yahoo!。 作为程序员,我首选Google。但当我看见我最爱的Google返回给我的全是一堆的js代码,根本没我想要的搜索结果。于是我转而投向了Bing的阵营,在用过一段时间后我发现Bing返回的搜索结果对于我的问题来说不太理想。正当我要绝望时,Google拯救了我。原来Google为了照顾那些禁止浏览器使用js的用户,还有另外一种搜索方式,请看下面的搜索URL:

https://www.google.com.hk/search?hl=en&q=hello

hl指定要搜索的语言,q就是你要搜索的关键字。 好了,感谢Google,搜索结果页面包含我要抓取的内容。

PS: 网上很多利用python抓取Google搜索结果还是利用 https://ajax.googleapis.com/ajax/services/search/web... 的方法。需要注意的是这个方法Google已经不再推荐使用了,见 https://developers.google.com/web-search/docs/ 。Google现在提供了Custom Search API, 不过API限制每天100次请求,如果需要更多则只能花钱买。

2. Python抓取并分析网页,

利用Python urllib2抓取网页很方便,不多说,见代码:defsearch(self, queryStr):

queryStr =urllib2.quote(queryStr)

url ='https://www.google.com.hk/search?hl=en&q=%s'%queryStr

request =urllib2.Request(url)

response =urllib2.urlopen(request)

html =response.read()

results =self.extractSearchResults(html)

第6行的 html 就是我们抓取的搜索结果页面源码。使用过Python的同学会发现,Python同时提供了urllib 和 urllib2两个模块,都是和URL请求相关的模块,不过提供了不同的功能,urllib只可以接收URL,而urllib2可以接受一个Request类的实例来设置URL请求的headers,这意味着你可以伪装你的user agent 等(下面会用到)。

现在我们已经可以用Python抓取网页并保存下来,接下来我们就可以从源码页面中抽取我们想要的搜索结果。Python提供了htmlparser模块,不过用起来相对比较麻烦,这里推荐一个很好用的网页分析包BeautifulSoup,关于BeautifulSoup的用法官网有详细的介绍,这里我不再多说。

利用上面的代码,对于少量的查询还比较OK,但如果要进行上千上万次的查询,上面的方法就不再有效了, Google会检测你请求的来源,如果我们利用机器频繁爬取Google的搜索结果,不多久就Google会block你的IP,并给你返回503 Error页面。这不是我们想要的结果,于是我们还要继续探索

前面提到利用urllib2我们可以设置URL请求的headers,  伪装我们的user agent。简单的说,user agent就是客户端浏览器等应用程序使用的一种特殊的网络协议, 在每次浏览器(邮件客户端/搜索引擎蜘蛛)进行 HTTP 请求时发送到服务器,服务器就知道了用户是使用什么浏览器(邮件客户端/搜索引擎蜘蛛)来访问的。 有时候为了达到一些目的,我们不得不去善意的欺骗服务器告诉它我不是在用机器访问你。

于是,我们的代码就成了下面这个样子:user_agents =['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \

'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \

'Mozilla/5.0(Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+\

(KHTML, like Gecko) Element Browser 5.0', \

'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \

'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \

'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \

'Mozilla/5.0(iPad; CPU OS 6_0like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) \

Version/6.0Mobile/10A5355dSafari/8536.25', \

'Mozilla/5.0(Windows NT 6.1) AppleWebKit/537.36(KHTML, like Gecko) \

Chrome/28.0.1468.0Safari/537.36', \

'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']

defsearch(self, queryStr):

queryStr =urllib2.quote(queryStr)

url ='https://www.google.com.hk/search?hl=en&q=%s'%queryStr

request =urllib2.Request(url)

index =random.randint(0, 9)

user_agent =user_agents[index]

request.add_header('User-agent', user_agent)

response =urllib2.urlopen(request)

html =response.read()

results =self.extractSearchResults(html)

不要被user_agents那个list吓到,那其实就是10个user agent 字符串,这么做是让我们伪装的更好一些,如果你需要更多的user agent 请看这里 UserAgentString。

17-19行表示随机选择一个user agent 字符串,然后用request 的add_header方法伪装一个user agent。

通过伪装user agent能够让我们持续抓取搜索引擎结果,如果这样还不行,那我建议在每两次查询间随机休眠一段时间,这样会影响抓取速度,但是能够让你更持续的抓取结果,如果你有多个IP,那抓取的速度也就上来了。

python 搜索引擎_利用Python抓取搜索引擎结果相关推荐

  1. python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法

    1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...

  2. 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

    链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwd=abc1 利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023- ...

  3. python学习之——利用urllib2抓取网页内容

    简单的抓取程序 #!/usr/bin/env python #-*- coding:utf-8 -*- import sys import urllib2 wp = urllib2.urlopen(' ...

  4. 如何用python赚钱_利用python能怎么挣钱

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 6年python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫 ...

  5. 利用python发送邮件_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  6. java调python 监控_利用Python实现一个简单的系统监控图表

    作为运维人员,想必大家肯定都做过这样的事情:为了监控系统资源使用情况,开了若干个窗口,来回切换看输出: 只要我切得够快,性能异常点就逃不过我的眼睛! 这个时候你要是有个监控工具自然是很好的,例如我们美 ...

  7. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  8. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  9. ppt python 图表_利用python分析weibo数据做成图表放入PPT中

    起因 很久以前,就有个想法,就是自动分析微博的数据,但是之前一直想的是网页版展示,flask想学了好久都没学,偶然的一次看到了一篇关于python处理pptx的文章,再加上同窗三年的室友在毕业后竟然主 ...

最新文章

  1. 如何用R语言在机器学习中建立集成模型?
  2. amr文件格式分析【转http://blog.csdn.net/dinggo/article/details/1966444】
  3. 软件开发工程师--经验之谈
  4. [bzoj 2768][bzoj 1877]
  5. 网络编程之 进程间的通信之管道的使用
  6. bzoj2437 [Noi2011]兔兔与蛋蛋
  7. java中对于框架的理解_接触Java项目一周后对一些基本框架的理解 | 学步园
  8. android 互传文件,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
  9. 计算机课后感400字,观后感400字
  10. 证书更新提示,网易漫画等...
  11. 阿里云主要产品及功能介绍,阿里云产品分为6大分类:云计算基础/安全/大数据/人工智能/企业应用/物联网
  12. jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company
  13. 不小心删除的文件怎么找回,文件误删除恢复的方法
  14. mysql is marked_快速解决MySQL:Table xxx is marked as crashed and should be repaired五个办法...
  15. 深度学习(三) 卷积神经网络入门与实践
  16. error: (-5:Bad argument) in function ‘seamlessClone‘ 和error: (-215:Assertion failed) 0 <= roi.x 0
  17. Privacy-Preserving Deep Learning via Additively Homomorphic Encryption
  18. Java+selenium简单实现web自动化测试
  19. js+css让背景图片动起来
  20. xenserver通过xencenter登陆后,虚拟机console页面空白问题解决

热门文章

  1. VMWare WorkStation Pro 15下NeoKylin及达梦数据库安装过程及踩坑笔记
  2. ural 1155. Troubleduons
  3. 【技巧插件】PDF文件转换为CAD文件
  4. windows10删除桌面右键菜单
  5. VHDL——4位移位寄存器
  6. 计算机串口标准尺寸图,广州大彩串口屏—基本型产品选型和外观尺寸图.pdf
  7. 计算机科学与技术与测控,测控技术与仪器.PDF
  8. Vip Test 联合创始人陈霁谈 Testops 最优质量反馈
  9. 全国计算机等级考试二级教程c语言程序设计考试大纲,全国计算机等级考试二级C语言程序设计考试大纲.docx...
  10. DataX 工具安装部署及使用