分享好友 行情首页 行情分类 切换频道
一个完整的爬虫架构 - 爬取搜狗微信文章/公众号的结果
2024-12-20 01:50  浏览:80

搜狗搜索还有一个非常重要的功能就是对接微信接口。这也是爬虫获取微信文章/公众号的主要途径之一。根据我在网上找到的信息,除了网页接口,至少还有两种方法可以抓取微信文章:

  • 微信网页版接口
  • 微信手机端,通过订阅要抓取的公众号来获得及时的信息

这两种目前我没试过,有机会看看能不能操作一下。

URL的格式和搜狗搜索差不多,不过多了几个过滤字段,简单试一试就能得到,这里就不都列出来了。

搜狗微信的反爬虫机制和搜狗搜索的原理是一样的,只是更加的苛刻。苛刻在两点:

  • 同个Cookie可访问的次数减少了。少到多少具体的值我没测出来,目前我是每40次更新一次Cookie,然后每次抓取后休息8-10秒。测下来效果还可以。但是偶尔也会进入反爬虫流程。
  • 第二点是我的感觉,不确定。似乎搜狗一旦怀疑你是爬虫,就会更加频繁的要求你输入验证码。
  • 首先我们需要一些关键词作为种子,放入消息队列MQ1中。这些关键词可以自己抓,也可以直接提供。
  • 假设有N个Spider,每个Spider在启动之后会先获取伪装信息、一个代理IP和一个Cookie(包含一对有效的和)。然后从关键词消息队列MQ1中拿到一个关键词,先对其进行预处理:获取这个关键词所有搜索结果的总页数和其相关的关键词。前者就是这个Spider所要执行的抓取任务,后者则会被添加到MQ1中供其他Spider继续使用。Spider每隔大约10秒钟进行一次抓取,一旦抓取次数达到阈值或触发反爬虫机制,就重新获取一个代理IP和一个新的Cookie。爬取到的搜索结果的URL在去重后会被放入另一个消息队列MQ2
  • Downloader从MQ2中提取结果的URL,然后将网页内容下载下来,解析器Parser会根据页面的内容进行相应的处理,然后保存到数据库中。
  • 另外在这个项目中,Cookie生成器会对Cookie池进行监控,需要保证Cookie池中拥有足量的有效和。
  • 其他关于日志、预警、监控、调度就略过了。

再说说细节(纸上谈兵):

假设现在代理IP池大小为100,不考虑机器的负担,理论上最多可以有100个Spider并行。如果一个Spider每隔10s抓取一次的话(经过我的测试这个间隔最好是在8-10s之间。),相当于大概一分钟6次,一小时360次,一天大概8640次。100个的话,一天大概就是864000次,即使有些请求失败,85W次也是有的。

另外一条请求中,可以解析出8-12条搜索结果。

这样划分其实只是逻辑上的区分,实际上完全可以一个模块直接完成提取关键词、增加相关搜索词、下载、解析、去重、写入数据库等所有任务。这样写的话,为了最大化效率,之后可以调整每种Worker的数量。

MQ1、MQ2可以直接使用Redis队列,去重的话则可以通过BloomFilter+Redis来实现。一般一个8G的机器就能保证大概30亿记录的去重任务,误差率不会超过万分之一,完全够用。

Cookie池是抓取搜狗微信最重要的一环。根据我的测试,包括后面关于验证码处理的部分我也会解释,其实在诸多Cookie值中真正有用的只有和。获取新Cookie有两种方法:

  • 用一个干净的IP访问任意搜狗微信的搜索页面,将返回的Cookie保存下来。
  • 触发并通过反爬虫机制,通过后会得到一个新的Cookie。

为了让Spider保持高效的工作,我的建议是构建一个Cookie池,在池中保存一定量的有效和值,一旦Spider请求的次数到达阈值(比如说40次),就从池中拿一个新的Cookie继续爬取。

第一种获取新Cookie的方法很简单,这里重点说下第二种,如何处理验证码

嫌麻烦可以直接跳到后面整个流程自动化破解的章节。

一旦触发了反爬虫,页面就会自动跳转到一个验证码的页面:


和搜狗搜索类似,后面是你触发反爬虫之前访问的URL,不同的是,这里再URL之前加了你可以通过类似




这里可以看到,在对验证码做了简单的正则校验后(是不是6位)。会触发一个ajax请求,类型是;URL是;带的参数有三个:就是你输入的验证码、是触发反爬虫之前的页面URL、是某个版本,不重要。POST请求会返回一个json对象,成功的话,会调用一个名为的方法。注意这里即使验证码是错误的,但是这条请求是成功的,因此仍然会调用方法。那么接下来看下方法,它在同一个js文件中:


可以看到,这里其实是对和两个值进行了操作。新的值等于,新的等于。

方法在另一个文件中,不过没什么特别的地方:


再来看下这个异步请求的返回内容,上文说过,它是一个json对象,如果你输入了正确的验证码:


如果验证码错误,和的值都会改变,而第三个的值就是新的的值。

到这里,其实流程就很清晰了,不过在页面的源代码里,还有一段js可以提供一些信息:



这里可以看到,整个流程大概是这样的:

  • 检查原本Cookie中是否包含字段,如果有,删除。
  • 当用户点击提交时,校验用户的输入是否是6位的字母数字组合,不是的话直接报错。是的话,发送一条URL是的XHR,其中包含用户输入的验证码、跳转之前的页面内容等。
  • 解析服务器返回的json对象,如果验证码是正确的,则更新和的值。否则会在页面上展示相应的错误信息。

我直接给出相应的Python 3.6的代码,这里我采用的是手工输入验证码,你也可以很容易的接入其他打码平台:


到这里也许有人会问,为什么是直接给的,而不是获取的。其实可以获取,执行一下这样的js代码就行:

    以上就是本篇文章【一个完整的爬虫架构 - 爬取搜狗微信文章/公众号的结果】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/quote/1860.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多   
最新新闻
微信视频号直播广告如何投放
我们现在发现很多企业做微信视频号的直播都要投广告了,没错,通过广告定向投放人群能将精准客户吸引到直播间,再通过主播的带货
IE浏览器软件哪个好 常用的IE浏览器软件排行
在这篇文章中,我们将深入探讨IE浏览器软件的热门选择及其在市场上的常用排行。无论是经典版本还是后续更新,你会了解到哪些浏览
Windows Phone 上的触控手势
下载代码示例当然,对于一种相对仍很年轻的技术来说,存在这么多的触控 API 也不足为奇。而且,多点触控比鼠标要复杂得多。这部
六年级上册16课夏天里的成长评课稿听课记录
六年级上册16课夏天里的成长评课稿听课记录一、读单元页,明确任务师:今天我们来学习第五单元,第五单元是一个习作单元。在这一
影视解说文案自动生成器-影视解说文案自动生成器2.50
在数字化时代的浪潮下,影视行业迎来了前所未有的发展机遇。随着影视作品的增多,怎样为这些作品打造出引人入胜的解说文案,成为
适合发朋友圈的句子大全11篇
【#好词好句# #适合发朋友圈的句子大全11篇#】旅行可以放松自己的心情,宽阔自己的心境,忘掉不顺心,迎接新的开心。旅行是在寻
从零开始学OPERA操作系统
1、房间查找 包括以下内容房间的状态分10种类型所有房间干净,经主管检查有问题,待查房干净房脏房一 快捷键的操作1 F1 OPERA HE
生成式AI为高级分析提供了新的可能性
生成式人工智能(genai) 的出现为工业过程分析带来了令人兴奋的新前景。这项变革性技术可以根据用户的提示生成新的文本、代码和图
阿里P9的真实生活!年薪300万却活得像穷人,依然生活在温饱线上……
  阿里巴巴是许多人梦想的工作地方。  在阿里,P9的年薪甚至高达300万。  他说,他的生活标准,其实并不高,只是跟随着收
本企业新闻
推荐企业新闻
发表评论
0评