25

本来不想在这节课讲如何用google来抓取邮箱的,但因为我们外贸邦网站最近上线的那个提取邮箱的功能实质上也是通过google来提取,但这里面绝不存在为了那个让路的嫌疑,只是通过这几天的上线还有用户的反馈,我们发现google对大批量的抓取的监测非常严格,一个服务器的单位时间上限估计就是200左右,除非像我们脑子抽住一样为了用户体验买了100多台服务器,否则这对普通用户来说太严格了也不实用,对你们民用来说,只有一个解决方法,就是用时间换空间,拉长抓取时间。另外一个原因么大家都清楚的,为什么大家都喜欢google而不喜欢bing,你技术上确实差了别人n条街,同样一个搜索结果google就是搜索的更精准,更不要说baidu了,压根上不了台面,那还是原始时代的东西,考虑到很多同学还在科学上网的边缘,实在不适合进度太快。所以这节课分为上下两部分,上部分为正统课,也就是这篇文章的内容,本ID假设你已经会科学上网了,那么你只要照着我的课一步步做下去就可以抓取google了,如果你不会,那么你还需要下半节课来补这方面知识。

先来对之前课程比较模糊的一些理论定性下,因为距离上次课程也有2周了,同时也给新来的同学补补课。我们通过两节课的学习其实是学习了如何用机器来模拟人的重复性劳动,提到了单位经济生产力,我们来想想如果今天我不用机器的话要找邮件的步骤是怎么样的?是不是先要打开浏览器,然后输入产品关键字+邮件后缀关键字,在结果中用肉眼搜索提取,翻页再查找,然后换一个邮件后缀,再重复,高级点的在搜索结果中打开目标网址,然后对网页进行邮箱提取,再高级点的,对目标网址进行关联网页的挖掘,然后把上述提炼的邮箱放到自己的邮箱列表里进行群发。这些动作基本对于业务员来说每天都需要重复,你们的老板和同事肯定也跟你们说过,要坚持,不断的发邮件,总会有希望的。其实从公式的角度来说前半段话就是提炼大量邮件,后半段话表示邮件发出去被回信的概率,我们这里假设用机器提取的邮箱被回信的概率要小于人工提取的(这是肯定的,因为我们没有做筛选),但提取邮件的数量要远远大于人工提取的,我们只要保证:机器提取的邮箱*较小的回信概率 >= 人工提取的邮箱*较大的回信概率,也就是只要满足(机器提取的邮箱 - 人工提取的邮箱)/100  > (较大的回信概率 - 较小的回信概率)就可以了,当机器获取邮箱的成本远远小于人工获取的时候,这就很容易被验证。第二节课里中我们最后产出了一个csv文件,这种格式的文件可以被几乎所有的邮件客户端导入,聪明的你应该知道后面群发如何操作了吧。

我们要明白一个道理,存在即合理,就像玩游戏,有些人喜欢辛苦练级,有些人喜欢直接RMB购买,无非就是一个花钱买时间的事情,这和经济学中说的富人宁可把牛奶倒在地沟里也不会给穷人喝其实是一个东西。市面上存在着很多帮你找邮件的软件,外贸邦也是一样,原理万变不离其宗,你有钱可以直接去买他们的服务,没钱或者你想学点东西就老老实实的上本ID的课,但相应的你花出去的就是时间和学习成本了,每个人都需要衡量一下自己,哪些是适合自己的,哪些是不能要的。下面开始上本节课的知识点。

【注释】

大家在看以前class_1.py这种脚本文件的时候,是不是总是会看到 # 这个符号,这个意思就是告诉python被 # 标记的这行代码不要执行,这就为我们在调整一些变化下提供了很大的便利,例如下面这个示例代码:

process_type = u'bing'

#process_type = u'google'

process_type是个变量,他的值决定了我们后面调用哪个搜索引擎来抓取,由于第二行被加了 #,所以不会被执行到,结果就是我们用bing来抓取,如果我们把代码变成下面这种:

#process_type = u'bing'

process_type = u'google'

那么第一行代码就不会被python执行到了,这时候process_type的值就变成了u'google',表示我们调用google来抓取邮箱,那么下面这种情况是调用bing呢还是google?

process_type = u'bing'

process_type = u'google'

答案是google,因为python执行了第一行后又执行了第二行,第二行的结果就覆盖了第一行了。

【代理】

如果我们手上已经有可以用的代理服务器地址了,那么就把他填在下面这段代码里:

proxies = {

u'http': u'http://127.0.0.1:8087',

u'https': u'http://127.0.0.1:8087'

}

本ID这里例子中的8087是SS默认的端口,懂的同学是不是看的很眼熟,注意http和https两个都需要修改,如果你用的是VPN全局翻,那么端口一般就省掉了,像下面这样即可:

proxies = {

u'http': u'http://127.0.0.1',

u'https': u'http://127.0.0.1'

}

如果你这里看的一团雾水,别急,我们还有下半节课,你今天付出多少努力,明天你就会得到多少,很简单的。

没了,就这么两个知识点,本ID尽可能的把所有说了你也不一定懂的细节都隐藏掉了,我们上这些课的目的就是尽可能的让大家都能节约生命,不要浪费在无聊的重复劳动上,我们应该花更多的精力在如何写开发信,如何维护客户关系上,这种事交给电脑交给python交给我交给外贸邦就可以了。让我们打开网盘,下载class_3.py文件,右键选择“Edit with IDLE”,照着上面教的知识点修改下方红框标记的地方:

第三课:从google抓取邮箱

至于别的几个变量email,want,f 还是像第二课中的那些,根据自己需要的来修改,完事了按F5吧。还有一个需要注意的是,有些代理,比如路由器层面的代理可能会不支持https这个格式,碰到的情况是执行的时候提示有SSL Error这种错误提示,这时候需要我们把代码里的https://www.google.com.hk/search 改写成 http://www.google.com.hk/search 。

上半节课完,下面开始下半节,但不是在这里上,因为下半节课的内容比较敏感,而且现在这个时间点又特别敏感,所以还是必须要收敛一点的,另外下半节课也不是每个同学都需要上的,已经会科学上网的同学或者能顺利执行class_3.py的同学是不需要上的,本ID只是对基础差的同学补补课,嗯嗯......

百度网盘: http://pan.baidu.com/s/1mi2d1Ba

第一课:2秒钟内获取50个邮箱:https://yue.52wmb.com/article/1993

第二课:从50个邮箱到1000个:https://yue.52wmb.com/article/1994

这里还附上微信中Leon同学的修改google方案(这个是针对启用了系统代理的方案):

新的问题,自己试着解决了,我果然是当程序员的料。 ping通谷歌,并且把proxies={ ...... } 这几行都注释掉后还需要去掉后面的“proxies=proxies”,否则会出现新的问题:NameError: global name 'proxies' is not defined。

2019.5.30 更新:感谢邦友“爱聪”的跟进,最近发现google的搜索规则发生了变动,所以之前下过第三课脚本同学需要重新下载一个新的,运行的时候需要先在cmd里多安装一个库 "pip install fake_useragent" (引号不要输入)

声明:该文观点仅代表作者本人,邦阅网系信息发布平台,邦阅网仅提供信息存储空间服务。

评论
登录 后参与评论
  • Miss-蒋胖妞
    Miss-蒋胖妞

    还是不行要怎么办

    2019-09-05
  • 邦友1546917936890
    邦友1546917936890

    抱歉,调用代理的代码如下,另外ping google.com -t显示请求超时,但是是可以用Google的呢~
    # 当用google抓取的时候设置代理
    proxies = {
    u'http': u'http://127.0.0.1:14554',
    u'https': u'http://127.0.0.1:14554'
    }

    是不是这个端口号的问题呢?因为代理IP还绑定了https的域名,谢谢楼主。

    2019-05-22
    邦号回复

    应该和代理IP绑定域名没有关系,那个只是外部出口,这样,如果你用的是全局的,那么可以尝试把proxies先去掉,也就是不用代理的方式来运行试试,具体就是把和proxies相关的都删掉,包括定义代理地址的地方和调用的地方。

    2019-05-22
  • 邦友1546917936890
    邦友1546917936890

    另外,梯子不是使用直接代理服器的IP ,在原IP上还绑定了一个https的域名,这个域名有影响联接python代码里的服务器连接么?谢谢。

    2019-05-22
  • 邦友1546917936890
    邦友1546917936890

    ....接上.....
    raise ProxyError(e, request=request)
    ProxyError: HTTPSConnectionPool(host='www.google.com.hk', port=443): Max retries exceeded with url: /search?q=wedding+%40gmail.com&start=0&num=100 (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x036C7650>: Failed to establish a new connection: [Errno 10061] ',)))
    >>> 楼主,你好,麻烦你忙看下?谢谢。

    2019-05-22
  • 邦友1546917936890
    邦友1546917936890

    Traceback (most recent call last):
    File "D:\python\class_3.py", line 79, in <module>
    nodes = process(key, e, start, rows)
    File "D:\python\class_3.py", line 61, in process_google
    ret = requests.get(u'https://www.google.com.hk/search', params=par, proxies=proxies)
    File "C:\Python27\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
    File "C:\Python27\lib\site-packages\requests\api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
    File "C:\Python27\lib\site-packages\requests\adapters.py", line 510, in send
    .....接下.....

    2019-05-22
  • 邦友1546917936890
    邦友1546917936890

    楼主,你好,第一课和第二课都可以成功运行, 第三课这里,我用的是VPN全局代理,F5后总是提示是联系不上代理服务器,运行下面拼127.0.0.1 可以拼通,请问我这里是哪里设置有问题呢?。谢谢。
    ProxyError: HTTPSConnectionPool(host='www.google.com.hk', port=443): Max retries exceeded with url: /search?q=wedding+%40gmail.com&start=0&num=100 (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x03555650>: Failed to establish a new connection: [Errno 10061] ',)))

    2019-05-20
    邦号回复

    不是ping 127.0.0.1,这是个本地ip,肯定能ping通的,要在cmd下ping www.google.com 之类需要翻墙的网址来测试,另外你调用代理的那段代码需要贴一下,我看下是不是语法上有问题。

    2019-05-21
  • 李科Like
    李科Like

    感谢指点。后来看了看我的本地代理地址和端口,相应修改后F5就有结果了!

    2019-02-11
  • 李科Like
    李科Like

    但是可以上Google网页

    2019-01-29
    邦号回复

    win10的环境下用了ss也是ping不通的,win10以下适用这条测试,但只要能用浏览器上google就表示可以用,你的问题应该是地址填的有问题,代码里的地址不能填ss的外拨地址,而是要用本地代理地址,类似127.0.0.1这种的

    2019-01-30
  • 李科Like
    李科Like

    然后尝试在proxies={ }里输入SS节点服务器地址(一串英文字符),端口号也没有错。还是出现相同错误。
    网上说用SS上网的话是ping不通谷歌的。这样咱们的抓取工具还有解吗?

    2019-01-29
  • 李科Like
    李科Like

    File "C:\Python27\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
    File "C:\Python27\lib\site-packages\requests\api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
    File "C:\Python27\lib\site-packages\requests\adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
    ConnectionError: ('Connection aborted.', BadStatusLine("''",))
    >>>

    2019-01-29
  • 李科Like
    李科Like

    我的情况是这样的。用SS上网,ping不通谷歌(昨天才弄明白什么是ping通谷歌)。查了我的proxy ip address(一串数字), 然后填入class_3的proxies={ }里,端口号也没有错。然后出现
    Traceback (most recent call last):
    File "E:\BaiduNetdiskDownload\class_3.py", line 79, in <module>
    nodes = process(key, e, start, rows)
    File "E:\BaiduNetdiskDownload\class_3.py", line 61, in process_google
    ret = requests.get(u'https://www.google.com.hk/search', params=par, proxies=proxies)

    2019-01-29
  • Robin(王晓鹏)-steel exporter
    Robin(王晓鹏)-steel exporter

    大神,我用的VPN,出现这个结果, 我试了下ping通谷歌链接超时,不知道怎么处理?用改端口是什么的吗?跪求大神帮忙解答
    Traceback (most recent call last):
    File "C:\Users\Administrator\Desktop\class_3.py", line 79, in <module>
    nodes = process(key, e, start, rows)
    File "C:\Users\Administrator\Desktop\class_3.py", line 61, in process_google
    ret = requests.get(u'https://www.google.com.hk/search', params=par, proxies=proxies)
    ProxyError: HTTPSConnectionPool(host='www.google.com.hk', port=443): Max retries exceeded with url: /search?q=graphite+electrode+%40hotmail.com&start=0&num=100 (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x03763C70>: Failed to establish a new connection: [Errno 10061] ',)))
    >>>

    2018-12-06
    邦号回复

    嗯,就是代理的问题,确认你vpn的本地端口,不一定是我代码里的1080,每个vpn不一样的

    2018-12-07
  • Daniel_Zou
    Daniel_Zou

    Traceback (most recent call last):
    File "D:\BaiduYunDownload\我们都是程序员\class_3.py", line 79, in <module>
    nodes = process(key, e, start, rows)
    File "D:\BaiduYunDownload\我们都是程序员\class_3.py", line 61, in process_google
    ret = requests.get(u'https://www.google.com.hk/search', params=par, proxies=proxies)
    File "C:\Python27\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
    File "C:\Python27\lib\site-packages\requests\api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
    楼主,出现这种情况怎么解决?我用的VPN,但是在命令行状态下无法Ping通google

    2018-11-25
    邦号回复

    代理设置的问题。。。仔细检查ip和端口是否正确

    2018-11-25
  • Vicky
    Vicky

    楼主不行噢,我登了VPN后按照你说的这样改了proxies = {

    u'http': u'http://127.0.0.1',

    u'https': u'http://127.0.0.1'


    }

    2018-11-02
    邦号回复

    端口呢,端口呢,端口呢

    2018-11-02
  • Alex
    Alex

    PS C:\Users\HIAPAD\desktop\python> python class_3.py
    File "class_3.py", line 80
    re_email = re.compile(ur'\w+[a-zA-Z0-9_.\-]*@%s' %e)
    ^
    SyntaxError: invalid syntax
    PS C:\Users\HIAPAD\desktop\python>
    提示这个错误是什么原因啊

    2018-09-27
    邦号回复

    你使用的是py3还是py2.7?

    2018-09-28
爱心公益
举报
问题反馈
返回顶部