专栏首页HACK学习爬取Google的心酸之路

爬取Google的心酸之路

0x00前言

早在前段时间就尝试写过爬Google的了。当时由于解决不了验证码就删了,当然这次也没解决。验证码不能绕过,只能避免,减少遇见

0x001过程

爬虫我追求,快、稳。但是由于Google这恶心的验证码机制,导致我不得不放弃这个想法。转而话费大量时间来解决频频碰到验证码的问题

写法只有请求,不换user-agent头的,加上多进程或多线程调用。一次就封IP了

import requests
rqt=requests.get(url='https://www.google.com/search?q=xxx&start=1',headers={'user-agent':'Google Splider'},timeout=3)

后面参考了几篇文章和一个项目:

对于 Python 抓取 Google 搜索结果的一些了解:

https://juejin.im/post/5c2c6bbee51d450d5a01d70a

Google_search

https://github.com/MarioVilas/googlesearch

看了这两个操作之后,发现都是用了同一操作

随机User-Agent头
随机使用Google的搜索子域

收集的User-agent头

实现这两种随机很容易,只需全部放入两个数组。使用random.choice()随机抽取即可

def read():
    dk=open('user_agents.txt','r',encoding='utf-8')
    for r in dk.readlines():
        data="".join(r.split('\n'))
        yield data

def reads():
    dk=open('domain.txt','r',encoding='utf-8')
    for r in dk.readlines():
        data="".join(r.split('\n'))
        yield data


def fenpei(proxy,search,page,sleep):
    user_agents=[]
    google_searchs=[]
    for ua in read():
        user_agents.append(ua)


    for domain in reads():
        google_searchs.append(domain)

虽然实现随机了,但是还是很脆弱。还是经不起Google那个狗贼般的验证码的摧残,在给其加上一个延时

import random
import requests
import time

def read():
    dk=open('user_agents.txt','r',encoding='utf-8')
    for r in dk.readlines():
        data="".join(r.split('\n'))
        yield data

def reads():
    dk=open('domain.txt','r',encoding='utf-8')
    for r in dk.readlines():
        data="".join(r.split('\n'))
        yield data


def fenpei(proxy,search,page,sleep):
    user_agents=[]
    google_searchs=[]
    for ua in read():
        user_agents.append(ua)


    for domain in reads():
        google_searchs.append(domain)

    time.sleep(int(sleep))
    proxy={'http':'http://{}'.format(proxy),'https':'https://{}'.format(proxy)}
    domains=random.choice(google_searchs)
    u_s={'user-agent':random.choice(user_agents),'Content-type':"text/html;charset=utf-8"}
    url='https://{}/search?hl=Chinese&q={}&btnG=Search&gbv=10&start={}'.format(domains,search,page)
    requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
    rqt=requests.get(url=url,headers=u_s,allow_redirects=False,verify=False,proxies=proxy,timeout=30)
    return rqt.content

0x002完整代码

Github仓库地址:https://github.com/422926799/note/tree/master/%E8%87%AA%E5%B7%B1%E5%86%99%E7%9A%84%E5%B7%A5%E5%85%B7/google%E6%8A%93%E5%8F%96

喜欢记得点个star哦!

成功抓取如下

遇见验证码

支持IP代理池

成功抓取如下图

本文分享自微信公众号 - HACK学习呀(Hacker1961X),作者:九世

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Getshell | 文件上传绕过整理

    HACK学习
  • Bypass | XSS Payload绕过云锁学习

    对于我这个菜鸟来说,我通过谷歌百度学习到很多前辈的资料,甚至每句话都是他的指导,我也很感激前辈的为我们铺设的道路,让我们更快的成长起来。我也乐于分享,可能有些知...

    HACK学习
  • 精华 | SQL注入万能Bypass技巧

    很多同学问注入bypass的一些细节,刚好前几天晚上做了一个梦,梦里进行了一些测试,今天觉得应该记录一下。

    HACK学习
  • Vue2.5 零基础开发去哪儿网实战(二) - 起步 Vue.js

    本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基础语法的基础上,扩展解析 MVVM 模式及前端组件化的概念及优势。

    JavaEdge
  • cglib动态代理和retrofit

    代理提供了一个可扩展的机制来控制被代理对象的访问,其实说白了就是在对象访问的时候加了一层封装。jdk动态代理使用起来非常简单,但是有个明显的缺点:需要目标对象实...

    提莫队长
  • Appium系列|Appium环境搭建(一)

    Appium是一种现在市面上很流行的自动化测试的工具,可以用来进行Android端、iOS端、Windows应用的自动化。对于移动端应用,它既支持应用内...

    测试邦
  • TransactionScope和Enterprise Libray 3.0 Data Access Application Block

    Enterprise Libray 3.0已经发布了,具体可参见TerryLee的 Enterprise Library 3.0 发布.下载了看看,有非常激动人...

    张善友
  • go笔记:序列化对象为byte

    超级大猪
  • python3的socket使用

    机器学习和大数据挖掘
  • 134. 加油站 Krains 2020-08-20 14:03:21 前缀和贪心

    当然也需要借助贪心的思想,如果总加油量和耗油量大于等于0那么总可以环绕一周,我们用diff[i]=gas[i]-cost[i]得到一个数组,我们找到是该数组的最...

    Krains

扫码关注云+社区

领取腾讯云代金券