1.问题

博客地址

目前主流的搜索引擎,非google莫属,但其对于非法(流量异常、爬虫)请求的封锁也是异常严厉。

本人前段时间有个脚本用到了谷歌搜索,具体见python之由公司名推算出公司官网(余弦相似度)当时直接使用的是一个python开源项目。

但在使用过程中,单ip的情况下爬取速度可谓感人,稍不留神还会被封,所以对于获取谷歌搜索结果的爬虫有必要进行改进。

说一说爬取谷歌搜索结果的问题:

1.正常打开谷歌搜索,然后审查元素想获取目标内容的时候,会发现是一大串js。

2.访问过快就会出现流量异常

2.如何解决

对于第一个问题:

大串js

应该有看到审查元素出来的都是js,然后检索的url是这样的:

https://www.google.com.hk/search?q=hello&oq=hello&aqs=chrome..69i57j69i60l2j69i65j69i60j0.876j0j7&sourceid=chrome&ie=UTF-8&google_abuse=GOOGLE_ABUSE_EXEMPTION%3DID%3Daa946d8c657cf359:TM%3D1484917472:C%3Dr:IP%3D118.193.241.44-:S%3DAPGng0tGiKFaIr7YCaivUEmmEHOYJhG4jg%3B+path%3D/%3B+domain%3Dgoogle.com%3B+expires%3DFri,+20-Jan-2017+16:04:32+GMT

这里解决办法很粗暴,禁止掉js就好,让我们看看禁止js后是什么样的:

禁止js

然后再看url:

https://www.google.com.hk/search?q=hello&btnG=Search&safe=active&gbv=1

对于这个url,相信机智的你应该会明白些什么。

这里可以写个简单的脚本,比如说获取,谷歌搜索第一页所有结果的html,简单写下:

URL_SEARCH = "https://{domain}/search?hl={language}&q={query}&btnG=Search&gbv=1"

URL_NUM = "https://{domain}/search?hl={language}&q={query}&btnG=Search&gbv=1&num={num}"

def search_page(query, language='en', num=None, start=0, pause=2):

"""

Google search

:param query: Keyword

:param language: Language

:return: result

"""

time.sleep(pause)

domain = self.get_random_domain()

if num is None:

url = URL_SEARCH

url = url.format(

domain=domain, language=language, query=quote_plus(query))

else:

url = URL_NUM

url = url.format(

domain=domain, language=language, query=quote_plus(query), num=num)

try:

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

r = requests.get(url=url,

allow_redirects=False,

verify=False,

timeout=30)

charset = chardet.detect(r.content)

content = r.content.decode(charset['encoding'])

return content

except Exception as e:

logging.error(e)

return None

到了这里,问题才刚开始,你可以做个实验,我假设你是使用代理进行谷歌搜索,如果你连续不断无间隔使用谷歌搜索某一关键字二三十下,不出意外你会被要求进行这样的验证:

流量异常

这个问题可真是让人十分厌恶,我并没有很好的解决办法,能做的唯有尽量避免:

1.ip轮询

2.每次结果爬取增加休眠

3.随机user_agent是必备

第一点和第三点不必多说,对于第二点增加休眠时间则需要我们好好地进行检测。

假设在单ip随机ua情况下:

1.这种情况下不休眠的话请求个两三次就会直接被封(第二天会被解封)

2.个人觉得这不是个解决办法,因为对休眠时间把控不好的话就会造成封ip,如果不想被封,我测试的话需要休眠60s浮动,这没什么意义。

3.而且这种情况下发现是直接封ip,对开发者太不友好。

对于这种情况,受同事神来一句,发现一个暂时的解决办法,请看下图:

google

单一ip不停地访问统一谷歌域名自然很容易被察觉,谷歌全球190+的域名,难道都在实时的统计ip么,可能有,但绝对不会像单域名那样严格,来做个测试。

我将全球190+谷歌域名集中起来,像ua一样随机轮换,然后进行测试(单ip),结果还不错:

1.首先没有出现被封ip,只会提示流量异常

2.还是需要休眠,本人休眠515s没有被封过,可根据自身情况来,如果想稳妥点就530s吧

我将这些写成了一个项目,magic_google-python,若你是phper,可以看看我写的php版本php-google,具体代码可以看这里,对应的功能很简单:

from magic_google import MagicGoogle

import pprint

# Or PROXIES = None

PROXIES = [{

'http': 'http://192.168.2.207:1080',

'https': 'http://192.168.2.207:1080'

}]

# Or MagicGoogle()

mg = MagicGoogle(PROXIES)

# Crawling the whole page

result = mg.search_page(query='python')

# Crawling url

for url in mg.search_url(query='python'):

pprint.pprint(url)

# Output

# 'https://www.python.org/'

# 'https://www.python.org/downloads/'

# 'https://www.python.org/about/gettingstarted/'

# 'https://docs.python.org/2/tutorial/'

# 'https://docs.python.org/'

# 'https://en.wikipedia.org/wiki/Python_(programming_language)'

# 'https://www.codecademy.com/courses/introduction-to-python-6WeG3/0?curriculum_id=4f89dab3d788890003000096'

# 'https://www.codecademy.com/learn/python'

# 'https://developers.google.com/edu/python/'

# 'https://learnpythonthehardway.org/book/'

# 'https://www.continuum.io/downloads'

# Get {'title','url','text'}

for i in mg.search(query='python', num=1):

pprint.pprint(i)

# Output

# {'text': 'The official home of the Python Programming Language.',

# 'title': 'Welcome to Python .org',

# 'url': 'https://www.python.org/'}

3.总结

对google搜索结果的爬取,有以下建议:

1.ip轮询

2.ua随机

3.domain随机

4.休眠

python爬取谷歌学术_对于python抓取google搜索结果的一些了解相关推荐

  1. python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  2. python爬网站数据实例-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  3. python爬贴吧回复_通过python爬取贴吧数据并保存为word

    前言 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发 ...

  4. python爬去朋友圈_利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  5. python爬朋友圈数据_利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  6. vs用Python爬数据?(一)网页抓取

    你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请 ...

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

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

  8. python爬今日头条组图_python 爬虫抓取今日头条街拍图片

    1. 打开google浏览器,输入www.toutiao.com, 搜索街拍.html 2.打开开发者选项,network监看加载的xhr, 数据是ajax异步加载的,能够看到preview里面的da ...

  9. python爬取文本中的成语_python正则表达式抓取成语网站

    #anthor jiqunpeng #time 20121124 import urllib import re def getHtml(url): #从URL中读取html内容 page = url ...

  10. java爬取今日头条_今日头条抓取街拍图片数据集

    spider1: 抓取街拍页面的所有入口链接: 1.数据查看到,街拍页面需要的数据集都在data这个集合中,而data是整个数据集字典的一个键,data这个键又包括了一个list,list中是一个个字 ...

最新文章

  1. 服务器证书安装配置指南(Nginx)-天威诚信
  2. Java基础day16
  3. 浅析NameNode/DataNode/SecondaryNameNode源码注释
  4. matlab在linux下面的相对路径的写法
  5. 示例解读 Python 2 和 Python 3 之间的主要差异
  6. 每日一题:leetcode989.数组形式的整数加法
  7. html5判断多选框是否选择的函数,复选框(checkbox)、多选框
  8. linux总线错误无法删除文件,linux – 系统D-Bus不允许使用conf文件来破坏所有权...
  9. 二叉树的前序、中序、后序遍历及互相求法
  10. jQuery/Zepto的Bootstrap轮播图中图片自适应宽高并居中插件
  11. SQLite3扩展C API
  12. 用Quartz处理定时执行的任务
  13. poj Labeling Balls 3687 拓扑排序!!!!
  14. 保险行业持续扩展,巨杉数据库再次中标人保财险
  15. 一个简单的Matlab面向对象编程实例
  16. 批量合并txt文件中的数据
  17. vivo和小米鸿蒙系统哪个好,vivo和华为还有小米,哪个系统流畅度更好?
  18. adb shell error: device offline
  19. 企鹅吞狗,狗走狐悲,狼厂危矣
  20. Accuracy, Precision, Recall和F1-score解释

热门文章

  1. 腾讯云CDN加速COS图床
  2. foobox 3.8(foobar2000 CUI配置)
  3. 网站建设需做的工作,你知道吗?
  4. 【运筹学】线性规划 单纯形法原理 ( 构造初始可行基 | 基变换 | 最优性检验 | 解的判别 | 检验数 | ( 唯一 / 无穷多 ) 最优解判别定理 | 无界解判别定理 )
  5. 3DMAX制作载具模型导入UE4导致轮子无碰撞解决方案
  6. android投屏到电脑
  7. PX4新增自定义orb消息
  8. 怎么把EXCEL内的十六进制数进行两位两位倒序排列
  9. 计算机windows7桌面管理,win7自带桌面整理,win7系统怎么改回自带桌面
  10. 从来不流鼻涕php没有毛病,睡觉的时候为什么不会流鼻涕?