前一段时间一直在研究如何用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,那抓取的速度也就上来了。

转载于:https://blog.51cto.com/8487428/1350174

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

  1. python 搜索引擎_利用Python抓取搜索引擎结果

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

  2. pythonallowpos_利用Python抓取并分析京东商品评论数据

    2.1 内容简介 本章主要介绍如何利用Python抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色等颜色, 70B到90D ...

  3. python爬取pdf教程_#如何利用Python抓取PDF中的某些内容#python爬取pdf教程

    如何利用Python抓取PDF中的某些内容 学生每天要学习,工作者要工作,家庭主妇每都要务.不论做什么,都有着相应的操作流同样就会有操作技巧.学生运用技巧学习才不会累,学得还会更快更多:工作者掌握技巧 ...

  4. Python学习第四篇:利用python抓取英语单词

    一,为什么这么做? 1,当我们需要自己定制自己的ietls单词本时,往往会因为各种原因不能达到目的.比如词形相近的词不在一起,没有例句等问题. 2,使用python抓取数据,是对python的一种熟练 ...

  5. python抓取网站图片_利用python抓取网站图片

    看了网上关于python抓取网站图片的例子,所以自己也尝试着写一个,但是发现这个网站的src不是标准的路径,需要自己添加前面的目录地址,尝试了几次也不成功,所以希望有经验的朋友指导下. 本人是初学者, ...

  6. python正则匹配找到所有的浮点数_如何利用Python抓取静态网站及其内部资源

    遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观.由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的. 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来. ...

  7. Python干货:教你如何利用python抓取微博评论,利用python知道更多微博大V有趣搞笑评论!

    [Part1--理论篇] 试想一个问题,如果我们要去抓取某个微博大V微博的评论数据,应该怎样去实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存.首先寻找从微博抓取评论 ...

  8. 如何利用python抓取免费的IP资源、并测试http代理是否可用

    最近上某乎,发现很多人在用免费的HTTP代理,但是又不知道这个IP是不能可用的,今天带大家get如何判断你网上抓取来的免费HTTP代理是否可用. 一.获取可用的HTTP代理 先用Ping 获取一些可用 ...

  9. 利用python抓取网页各种类型内容(静态、动态)

    声明:        本实验的操作系统是ubuntu,python 2.X Code-1:抓取静态的title数据(无需登录用户) 获取淘宝主页的页面静态数据 url:http://www.taoba ...

最新文章

  1. 10个堪称神器的学习网站
  2. Windows - Windows批处理
  3. 与图像处理、图像识别有关的学术机构或会议
  4. 网站性能分析(下)-让网站并行加载但顺序执行JS
  5. 鱼不长肢蛇不长脚,多多益善更烦恼?人猴嵌合肥胖有救,生活还要压力要小!...
  6. 京东公布618第一小时战报:成交金额同比增长65%
  7. TJUSCSST第二次作业
  8. VC++等待光标的两种实现方式
  9. 7.2 GaussianMixture实战
  10. python函数大全pdf_python内置函数大全.pdf
  11. 抖音记事本代码html,抖音使用教程 抖音表白代码使用方法介绍
  12. 朱兰的质量观(转载)
  13. 毕业生必看,计算机毕设如何选题才能高分通过?
  14. 学信网忘记原手机号码的解决办法
  15. 移动数据安全防护措施有哪些
  16. java计算机毕业设计企业物资管理系统源代码+数据库+系统+lw文档
  17. 智能暖风机——8.云端控制
  18. 编译指示_#pragma在DSP中的编程技巧
  19. 谷歌高效开发的秘密:来自谷歌前员工的软件开发工具指南
  20. 关于Ubuntu下的PDF阅读器

热门文章

  1. 对话框响应WM_KEYDOWN消息
  2. dll注入的一种方式
  3. AndroidStudio安卓原生开发_Activity的启动模式standard和一部分singleTop启动模式---Android原生开发工作笔记86
  4. k8s核心技术-Helm(安装和配置仓库)---K8S_Google工作笔记0045
  5. 持续集成部署Jenkins工作笔记0006---运行Jenkins主体程序并初始化
  6. 微信公众开放平台开发06---复习一下servlet
  7. Java中遍历文件夹的2种方法
  8. Android九宫格闪烁,js实现九宫格点击按钮随机三个格子闪烁,发生错误
  9. python多用户登录_python多用户
  10. php火的原因,重燃你的PHP安全之火