技巧:【SEO干货】挖掘网站排名关键词六大诀窍
优采云 发布时间: 2022-11-15 22:37技巧:【SEO干货】挖掘网站排名关键词六大诀窍
【周群超新媒体运营教材第三节SEO干货分享】
建议公司负责人转发给新媒体运营负责人或公司文员阅读。
1、百度下拉框及相关搜索 通过下拉框及相关搜索采集长尾词的方法是逐级采集,比如搜索SEO,然后在SEO下拉框搜索SEO优化-下框。下拉框和相关搜索向下采集三层,超过三层的长尾词相关性相对较低,百度相关搜索的相关性低于搜搜Ask下拉框。
百度的下拉框搜索SEO
2、SosoAsk的搜索方式与百度类似。第二层的关键词是点击百度相关搜索词,点击SosoAsk中的某个词时,具有独立相关内容的词。二级词条将继承一级搜索词的属性。简单的解释就是百度相关搜索不同级别之间的关键词连接很低,而搜搜Ask不同级别之间的长尾词连接很高,所以一般多用关键词>。搜搜问与百度不同的另一个方面是,搜搜更倾向于问答。
百度相关搜索SEO
3、百度知乎进入百度知乎()搜索关键词,搜索知乎问答题的前两页,采集为网站长尾关键词。
4、百度推广助手 百度推广助手有大量精准的长尾关键词,并且有更详细的统计标注,比如转化率高或者潜力比较大。
5. 百度索引 通过百度索引,您可以挖掘出热门的关键词和与此关键词相关的搜索词。长期关注和更新这些关键词,将帮助您紧跟用户当前需求,提高排名。
●●●
▼
如果觉得【新媒体运营精要手册】第三期还不错,请点击“欣赏”鼓励一下,钱不超过1元,关键是对我辛勤工作的一种认可。
干货内容:干货 | 分享一下爬虫正确的学习路径
“
阅读本文大约需要 10 分钟
“
在当今大数据时代,网络爬虫已经成为获取数据的重要手段,但是想要学好爬虫并不是那么简单
首先知识点和方向太多,涉及到计算机网络、编程基础、前端开发、后端开发、App开发与逆向工程、网络安全、数据库、运维、机器学习、数据分析等,它把一些主流的技术栈像一张大网络一样连接在一起
因为涵盖的方向比较多,所以要学的东西也很零散、杂乱。很多初学者并不清楚该学什么知识,在学习过程中也不知道如何解决反爬的问题。让我们在这篇文章中做一些归纳和结论
初学爬虫
一些最基本的网站往往没有任何防爬措施。比如在某个博客站点,如果我们要爬取整个站点,我们可以沿着列表页面爬取到文章页面,然后向下爬取的时间、作者、正文等信息文章。
代码怎么写?使用Python的requests等库就够了,写一个基本的逻辑,顺带拿到各个文章的源码,用XPath,BeautifulSoup,PyQuery或者正则表达式进行分析,或者粗略的字符串匹配到拉出想要的内容,再添加一段文字写入保存即可,大功告成。
代码很简单,就是几个方法调用。逻辑很简单,几个循环加存储。最后我们可以看到每个文章都保存在了我们自己的电脑里。当然可能有些同学不太会写代码或者懒得写,所以使用基本的可视化爬取工具,比如某爪鱼、某采集器也可以通过可视化点击爬下数据.
如果存储稍有扩展,可以连接MySQL、MongoDB、Elasticsearch、Kafka等保存数据,实现持久化存储。以后查询或操作会更方便。
反正效率再高,一个完全没有反爬的网站,最基本的也能搞定。
至此,你说你了解爬虫?不,它甚至不接近。
Ajax,动态渲染
随着互联网的发展,前端技术也在不断变化,数据加载方式也不再是简单的服务端渲染。现在大家可以看到很多网站的数据可能是以接口的形式传输的,或者即使不是接口也是一些JSON数据,然后通过JavaScript渲染出来的。
这个时候再想用requests爬取也没用,因为requests爬取的源代码是服务端渲染的,浏览器看到的页面结果和requests得到的结果是不一样的。真正的数据是由 JavaScript 执行的。数据源可能是Ajax,也可能是页面中的一些数据,也可能是一些ifame页面等,但大多数情况下,可能是通过Ajax接口获取的。
因此,很多时候,需要对Ajax进行分析,知道这些接口的调用方法后,用程序来模拟。但是有些接口带有加密的参数,比如token、sign等,不好模拟,那怎么办呢?
一种方法是分析网站的JavaScript逻辑,把里面的代码挖出来,弄清楚这些参数是怎么构造的,弄清楚思路后再用爬虫模拟或者重写。如果自己解决了,那么直接模拟的方法效率会高很多,需要一定的javascript基础。当然,有些网站的加密逻辑太强大了,出来一个星期也未必能解出来,最后放弃了。
那么解决不了或者不想解决,怎么办呢?这时候可以通过模拟浏览器直接爬取简单粗暴的方法,比如Puppeteer、Pyppeteer、Selenium、Splash等,这样爬出来的源代码就是真正的网页代码,数据自然轻松提取,同时还绕过了解析 Ajax 和一些 JavaScript 逻辑的过程。这样一看到就可以爬取,难度也不是很大。同时模拟浏览器,很少有法律问题。
但实际上后一种方式也会遇到各种反爬的情况。现在很多网站都会识别webdriver,看你用的是Selenium等工具,直接kill或者不返回数据,所以你碰上这种网站,我只好来这里解决了问题。
多进程、多线程、协程
用单线程爬虫模拟上面的情况比较简单,但是有个问题就是速度慢。
爬虫是 IO 密集型任务,因此大多数情况下它们可能在等待网络响应。如果网络响应速度慢,他们必须一直等待。但是这段空闲时间其实可以让CPU做更多的事情。那我们该怎么办呢?打开更多线程。
所以这个时候我们可以在一些场景下加入多进程、多线程。多线程虽然有GIL锁,但是对爬虫的影响并没有那么大,所以使用多进程和多线程可以成倍提高爬虫速度,对应的库有threading和multiprocessing。
异步协程更棒。有了aiohttp、gevent、tornado等,基本上你想做多少并发就做多少,但是你要慢慢来,不要惹别人网站。
总之有了这几个,爬虫速度就会提高。
但是提高速度并不一定是好事。接下来肯定是反爬了,封你IP,封你账号,弹出验证码,返回假数据,所以有时候爬慢好像是个办法?
分散式
多线程、多处理、协程都可以加速,但毕竟还是单机爬虫。要真正实现规模化,你必须依赖分布式爬虫。
分销的核心是什么?资源共享。比如爬取队列共享,去重指纹共享等。
我们可以使用一些基本的队列或者组件来实现分布式,比如RabbitMQ、Celery、Kafka、Redis等,但是经过很多人尝试自己实现一个分布式爬虫,在性能和扩展性上总会出现一些问题。当然,特别厉害的人除外。很多公司其实都有自己开发的一套分布式爬虫,跟业务的联系比较紧密。这当然是最好的。
现在主流的Python分布式爬虫还是基于Scrapy,对接Scrapy-Redis、Scrapy-Redis-BloomFilter或者使用Scrapy-Cluster等,都是基于Redis共享爬行队列,总会有一些内存问题。所以也有人考虑连接其他的消息队列,比如RabbitMQ、Kafka等,来解决一些问题,效率也不错。
总之,要提高爬取效率,必须掌握分布。
验证码
爬虫难免会遇到反爬,验证码就是其中之一。想要能够反爬,首先要能够解码验证码。
现在可以看到很多网站都会有各种验证码,比如最简单的图形验证码。如果验证码的文字是正规的,OCR或者基础模型库都可以识别。如果不想做,可以直接连接打码平台做,准确率还是有的。
但是,您现在可能看不到任何图形验证码。都是行为验证码,比如XQ、XDun等,国外也有很多,比如reCaptcha等。对于一些比较简单的,比如滑动的,可以想办法找出差距,比如图像处理对比,深度学习识别。至于轨迹,写一个模拟正常人的行为,加点抖动之类的。有了轨迹后如何模拟?如果你牛逼,可以直接分析验证码的JavaScript逻辑,输入轨迹数据,然后就可以得到里面的一些加密参数,直接把这些参数放到表单或者界面中。你可以直接使用它。当然也可以通过模拟浏览器来拖动,
当然,拖拽只是验证码的一种,还有文本选择、逻辑推理等,实在不想做的话,可以找个打码平台解决,模拟一下,但毕竟,要花钱,有的专家会选择自己训练深度学习相关的模型,采集数据,标注,训练,针对不同的业务训练不同的模型。这样有了核心技术,就不用再花钱找编码平台,再研究验证码的逻辑仿真,加密参数就可以解决了。不过有的验证码很稀有,有的我没管理过。
当然,有些验证码可能会因为请求太频繁而弹出,可以通过更改IP什么的解决。
封禁IP
封IP也是一件很头疼的事情,有效的办法就是换代理。
代理有很多种,市面上有免费的,收费的也太多了。
首先,你可以使用市面上的免费代理,自己搭建一个代理池,采集全网所有的免费代理,然后添加测试人员不断测试。测试的网址可以改成你要抓取的网址。这样通过测试的一般都可以直接用来攀登你的目标网站
付费代理也是如此。很多商户都提供代理提取接口,一次请求就可以提取几十个、上百个代理。我们还可以将它们连接到代理池。但是,该机构也有各种套餐。公开代理、独家代理等的质量和被封杀的概率也不同。
有些商家还使用隧道技术设置代理,让我们不知道代理的地址和端口,代理池由他们维护,比如云云,使用起来更省心,但可控性很困难。更差。
还有更稳定的代理,比如拨号代理、蜂窝代理等,接入成本会高一些,但一定程度上也可以解决一些IP被封的问题。
不过这些东西都不简单,为什么一个好的高隐特工无缘无故爬不上去,后面的一些事情就不说了。
关闭账户
有些信息需要模拟登录才能抓取。如果你爬的太快,人家网站会直接封禁你的账号,你就无话可说了。比如你爬公众号,如果有人封了你的WX号,就完了。
一种解决办法当然是放慢频率,控制节奏。
另一种方法是查看其他终端,如手机页面、App页面、wap页面等,看是否有绕过登录的方法。
另一个更好的方法是转移。如果你有足够的数字,建立一个池
比如:Cookies池,Token池,Sign池,不管是什么池,多个账户的Cookies和Token都放到这个池子里,用的时候从里面随机拿一个。
如果要保证抓取效率不变,那么相对于20个账号和100个账号,每个账号对应的Cookies和Token的使用频率会变成原来的1/5,被封的概率也会变大1/5。随后降低
精彩反爬
以上就是几种主流的反爬方法,当然还有很多奇葩的反爬方法。比如返回假数据,返回图片数据,返回乱序数据,返回诅咒数据,返回求饶数据,都看具体情况。
这些反爬你得小心了。之前看到直接返回 rm -rf / 的反爬并不少见。如果你正好有一个模拟执行并返回结果的脚本,那后果你自己想象吧。
JavaScript 逆向工程
说到沉重。随着前端技术的进步和网站防爬意识的增强,很多网站选择在前端上下功夫,即在前端加密或混淆一些逻辑或代码前端。当然,这不仅仅是为了保护前端代码不被轻易窃取,更重要的是防止爬取。比如很多Ajax接口都会携带一些参数,比如sign,token等,这些在上一篇文章中已经提到。我们可以用上面提到的Selenium等方法来爬取这种数据,但是总的来说效率太低了。毕竟它模拟的是网页渲染的*敏*感*词*,真正的数据可能只是隐藏在一个小小的界面中。
如果我们真的能够找出一些接口参数的逻辑,用代码来模拟执行,效率会成倍提高,而且也能在一定程度上避免上面提到的反爬现象。
但问题是什么?难的
webpack一方面是将前端代码压缩转码成一些bundle文件,一些变量的意义已经丢失,不容易恢复。然后一些网站加上一些混淆器机制,把前端代码变成你根本看不懂的东西,比如字符串拆解和改组,可变十六进制,控制流扁平化,无限调试,控制台被禁用,等等,前端的代码和逻辑都变的面目全非了。有的是用WebAssembly等技术直接编译前端核心逻辑,只能慢慢捡。虽然有些有一定的技巧,但总的来说还是需要不少时间。但是一旦解决了,一切都会好起来的。怎么说?就像一道奥林匹克题,如果你解决了,你就会升天,
很多公司招聘爬虫工程师都会问有没有JavaScript逆向基础,网站已经被破解了,比如某宝某号某文章等,如果找到需要的就可以了可以直接雇用你。每个网站都有不同的逻辑和难度
应用程序
当然,爬虫不仅仅是网络爬虫。随着互联网时代的发展,现在越来越多的企业选择把数据放在APP上,有的公司甚至只有APP没有网站。所以只能通过App爬取数据。
怎么爬?最基本的是抓包工具。Charles和Fiddler捕获界面后可以用它来模拟界面。
如果接口有加密参数怎么办?一种可以边爬边处理的方式,比如mitmproxy直接*敏*感*词*接口数据。另一方面,你可以使用Hook,比如你也可以在Xposed上获取。
那么爬坡时如何实现自动化呢?你不能用手戳它。其实工具很多,安卓原生的adb工具也有。Appium现在是比较主流的解决方案。当然还有其他的精灵可以实现。
最后,有时我真的不想经历自动化过程。就是想挖出里面的一些接口逻辑,只好逆向工程了。IDA Pro、jdax、FRIDA等工具派上用场。当然,这个过程和逆向 JavaScript 一样痛苦,你甚至可能不得不阅读汇编指令。一次掉一根头发也不是不可能。
聪明的
您对以上所有内容都很熟悉。恭喜你,你已经超越了80%到90%的爬虫玩家。当然,专门做JavaScript逆向和App逆向的都是食物链顶端的男人。严格来说,这种是不属于爬虫的范畴的,我们也不把这种神灵算在里面,反正我不算。
除了上面的一些技巧,在某些情况下,我们可能还需要结合一些机器学习的技巧,让我们的爬虫变得更聪明。
比如现在很多博客和新闻文章在页面结构上相似度比较高,提取的信息也比较相似。
比如如何区分一个页面是索引页还是详情页?如何提取详情页的文章链接?如何解析文章页面的页面内容?这些其实可以通过一些算法计算出来。
因此,一些智能解析技术也开始运行,比如提取详情页,朋友写的GeneralNewsExtractor表现非常好。
假设我有一个需求,我要爬取10000条新闻网站数据,是否需要一个一个写XPath?给我写下来。如果有智能分析技术,在容忍一定误差的情况下,分分钟就能搞定。
总之,如果我们也能学会这部分,我们的爬虫技术会如虎添翼。
运维
这也是一件大事。爬虫和运维也是息息相关的。
比如写完一个爬虫,如何快速部署到100台主机上运行。
比如如何灵活的监控各个爬虫的运行状态。
比如爬虫有代码变动,如何快速更新。
比如如何监控一些爬虫的内存占用和CPU消耗。
比如如何科学控制爬虫的定时运行,
比如爬虫出现问题,如何及时收到通知,如何建立科学的报警机制。
在这里,每个人都有自己的部署方式,比如使用Ansible,当然。如果你使用Scrapy,你就有了Scrapyd,然后你可以通过一些管理工具来完成一些监控和定时任务。但是我现在用的比较多的是Docker+Kubernetes,再加上一套DevOps,比如GitHub Actions、Azure Pipelines、Jenkins等,快速实现分发部署。
你们有的用crontab做定时任务,有的用apscheduler,有的用管理工具,有的用Kubernetes。我用Kubernetes比较多,定时任务也很容易实现。
至于监控,有很多,一些专门的爬虫管理工具自带一些监控告警功能。一些云服务也有一些监控功能。我正在使用 Kubernetes + Prometheus + Grafana。CPU、内存、运行状态一目了然。在Grafana中配置告警机制也很方便。它支持Webhook、email,甚至是某某钉钉。
对于数据存储和监控,使用Kafka和Elasticsearch也很方便。我主要用后者,然后配合Grafana,对爬取的数据量,爬取速度等监控一目了然。
结语
至此,爬虫涵盖的部分知识点大同小异。怎么样,梳理一下,是不是计算机网络、编程基础、前端开发、后端开发、App开发与逆向工程、网络安全、数据库、运维、机器学习都涵盖了?
以上总结可以看作是爬虫新手到爬虫高手的路径。其实每个方向都有很多可以研究的点。如果每一个点都被提炼出来,那将是非常了不起的。
爬虫经常学习学习,成为全栈工程师或全职工程师,因为你可能真的无所不知。可是没办法,都是被爬虫逼的,若不是被生活所困,谁还想有才华?
但是人才呢?摸摸你的头顶,搞什么鬼,我的头发呢?
好吧,每个人都明白。
最后但同样重要的是,珍惜生命和每一缕头发!