前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬取Google的心酸之路

爬取Google的心酸之路

作者头像
HACK学习
发布2019-11-28 21:48:19
1.4K0
发布2019-11-28 21:48:19
举报
文章被收录于专栏:HACK学习

0x00前言

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

0x001过程

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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
随机User-Agent头
随机使用Google的搜索子域

收集的User-agent头

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

代码语言:javascript
复制
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那个狗贼般的验证码的摧残,在给其加上一个延时

代码语言:javascript
复制
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代理池

成功抓取如下图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HACK学习呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00前言
  • 0x001过程
  • 0x002完整代码
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档