本文更新中,敬请期待

本文阅读条件:
基本的Python, javascript知识,希望你了解一点点爬虫知识,大神可无视。

写在最前:
现在使用爬虫技术有较大法律风险,务必注意使用场景,本文仅供学习使用。
小弟我目前并不是程序员,也没有正式做过程序员,有错误之处欢迎指正,感谢~~
未经允许,请勿转载!

开篇:
控制浏览器影响浏览器的运行的常见方法:
1.自动化测试技术,利用浏览器提供的控制接口,常见方案如selenium,phoantomjs
2.从系统进程层面注入代码到浏览器js执行引擎,没有研究过
3.中途拦截并篡改js代码,常见方案如 mitmproxy
4.浏览器插件(本文使用的是Chrome Extension, 基本适用于chrome内核的浏览器,如360浏览器)

本文采用的是方案4,可代替方案1与方案4,又或者,相互结合。

优点:
*
简单,只需懂简单的js就可以啦
*
情怀,可以使用Jquery,想想在selenium的driver.get_element_by_id,还有美丽汤,鸡汤(jsoup),人生苦短,吾生有涯而知无涯,能不学就不学
*
反爬,现在淘宝等一些网站可以检测selenium,运行了selenium的浏览器会有一些特殊的变量产生,类似的“指纹”还是比较多的,不好对抗,同时没有很好的办法可以避开。具体检测手段可谷歌“selenium detect”学习。
*
暴力:直接访问网页的变量,cookie等;任意执行当前页面的Js函数,对破解很有用;可以说是直接强奸目标网页了。
*
易于调试,直接使用chrome dev tool
*
轻松面对动态生成的页面

缺点:
*
速度,但也比selenium好(只是在有窗口的情况下),因为用senlenium要多开个senlenium进程,耗费更多的内存和CPU。所以说此法只能适用小中规模的爬虫。
*
既是优化也是缺点,使用Rest Api的形式与后台进行交互,处理数据,所以就需要多一个“后台”,我们可以把插件看成client,后台看成server(本文实用python的flask框架)。

关于Chrome extension的学习,难度还是比较低的,只需一些基本的前端知识,如果你以前没接触过爬虫,也可以试试,因为浏览器插件非常好玩
谷歌官方文档:https://developer.chrome.com/extensions/devguide
Chrome插件开发全攻略:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html
也可以阅读我博客,我尝试总结一些技巧,希望对你有用: https://blog.csdn.net/chifu5720/article/details/101622682
另外,油管上也有不少教程,是中文世界未曾存在过的。

如果你未玩过chrome插件,可在你的浏览器下输入以下地址访问你已安装的插件
chrome://extensions/

这是我们的插件

下面我们来撸一个搜狗公众号文章采集的插件,话说我们有时能看到一些文章,也可以这样收藏一下。

setTimeout(() => {var URL = document.URL;function blobToDataURL(blob, callback) {let a = new FileReader();a.onload = function (e) {callback(e.target.result);}a.readAsDataURL(blob);}// *********************************************************************************************************************// 搜狗搜索页面 作用是当前所有文章页并自动打开下一页var sougou_search_reg = new RegExp('https://weixin\.sogou\.com/weixin');var enter_link = new RegExp("weixin\.sogou\.com/api/share");var sg_links = [];if (sougou_search_reg.test(document.URL)) {$('a').each(function (index, element) {let link = $(this)[0].dataset.share;// console.debug("INJECTEE>>" + link);if (link && enter_link.test(link)) {sg_links.push(link);}});// 去重sg_links = Array.from(new Set(sg_links));let time = 1;// 遍历打开所有文章,进入到文章页面后采集代码自动执行for (let sg_link of sg_links) {(function (time) {setTimeout(() => {console.log(sg_link);window.open(sg_link);}, time * 1 * 1001);})(time++);}// 自动进入下一页,下一页又会自动进入下一页,直到最后一页if ($("#sogou_next").length != 0){setTimeout(() => {window.open("https://weixin.sogou.com/weixin" + $("#sogou_next").attr("href"));}, 60 * 1000);}}// **************************************************************************************************************************// 搜狗微信文章页面注入// let sougou_find_group_reg = new RegExp("weixin\.sogou\.com/weixin\\?type=");let sougou_find_group_reg = new RegExp("mp\.weixin\.qq\.com/s\\?src=");if (sougou_find_group_reg.test(URL)) {// alert("代码注入成功!");$(() => {var fetches = [];$("img").each(function (i, e) {var img = $(this);let src = img.attr("data-before-oversubscription-url");if (!src){src = img.attr("data-src");}if (src && (src.indexOf("mmbiz.qpic.cn/mmbiz") != -1 || src.indexOf("mmbiz.qlogo.cn/mmbiz"))) {fetches.push(fetch(src).then(function (res) {return res.blob();}).then(function (res) {blobToDataURL(res, function (result) {img.attr("src", result);// 可以类似这样移除一些没用的内容,压缩整个htmlimg.removeAttr("data-src");// 实测没有下面这句的话 在手机下浏览html会变形img.attr("style", "width: 100% !important; height: auto !important; visibility: visible !important;")});}).catch(status, err => {return console.log(status, err);}));} else {// 正常来说,公众号所有图片符合以上的匹配console.error("INJECTEE:>>未成功处理图片>>:" + src);}});// 确保所有图片加载完毕Promise.all(fetches).then(function () {setTimeout(() => {data = {"url":URL,"title": $(".rich_media_title").eq(0).text().replace(/\s+/g,""),"source": $("#js_name").text().replace(/(^\s*)|(\s*$)/g, ""), // 采集的公众号名字"content": $('html').html()};// 额外修剪$("#js_view_source").remove();console.log("INJECTEE:>>文章处理完毕,开始发送文章数据!");$.ajax({url: "https://172.16.5.71:4499/record",type: "post",data: data,});}, 2 * 1000);})// 采集完毕了 10秒后自动强制关闭页面function AUTOCLOSE() {window.opener = null;window.open('', '_self');window.close();}setTimeout(() => {AUTOCLOSE();}, 10 * 1000);});}
}, 3 * 1000);
from flask import Flask,request
import codecs,osapp = Flask(__name__)@app.route("/record",methods=["POST"])
def _record():url = request.values.get("url")title =  request.values.get("title")source =  request.values.get("source")content = request.values.get("content")write_path = os.path.join(os.getcwd() ,"articles/{}_{}.html".format(source,title))print("当前文章:",title)# 以 文章标题.html 为目标写出文件名with codecs.open(write_path, mode="w+",encoding="utf-8",errors="ignore") as f:# 写出网页内容f.writelines(content)f.flush()return "200"if __name__  == '__main__':app.run(host='0.0.0.0',port="4499",debug=True,threaded=True,ssl_context="adhoc")

案例地址:
https://github.com/ChenAnZong/ChromeExtensionCodeInjectSpider

独辟蹊径做爬虫,使用Jquery+Chrome Extension,让浏览器成为你的数据收集器 公众号文章自动离线相关推荐

  1. php 获取文章内容首图,公众号文章首图要怎么做?公众号文章首图模板精选合集...

    公众号文章首图要怎么做才能吸睛.亮眼.促使用户点击呢?在为公众号文章首图烦恼的你别担心,稿定设计上有大量的公众号文章首图模板,一定有合你心意的一款!俗话说:"授人以鱼不如授人以渔" ...

  2. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  3. python write非法字符报错_Python爬虫实现的微信公众号文章下载器

    平时爱逛知乎,收藏了不少别人推荐的数据分析.机器学习相关的微信公众号(这里就不列举了,以免硬广嫌疑).但是在手机微信上一页页的翻阅历史文章浏览,很不方便,电脑端微信也不方便. 所以我就想有什么方法能否 ...

  4. Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章

    前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  5. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  6. 微信公众平台接口调试工具json格式不对怎么搞_一步步教你打造微信公众号文章爬虫(3)-批量下载...

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功 ...

  7. Python2.7爬虫——爬取微信公众号文章

    今天跟着这篇博客抓取微信公众号文章练习了一下爬虫,运行成功.想和大家分享一下过程中出现的问题和解决方法. 运行环境 windows 7 + Pycharm2018 + Python 2.7 目录 目录 ...

  8. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章

    下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...

  9. python信息检索和评价系统_Python爬虫实现的微信公众号文章下载器

    所以我就想有什么方法能否将这些公众号文章下载下来.这样的话,看起来也方便.但是网上的方法要么太复杂(对于我这个爬虫入门新手来说),要么付费. 但我的需求其实却很简单--"方便的查找 / 检索 ...

最新文章

  1. C#的简单不安全双向“混淆”
  2. const、static型数据在内存中如何存储?(变量存放位置)
  3. MYSQL交通系统查询,城市公交查询系统的设计与实现(SSH,MySQL)(含录像)
  4. java 判断是否整形_java判断是否基本类型
  5. 2014年广州科目三道路驾驶技能考试/广汕路科目三路考系统操作和评判指南
  6. 【操作系统】进程的状态与转换
  7. [Hive]看懂Hive的执行计划
  8. java mysql数据库操作_java 操作mysql数据库
  9. Mysql8.0如何重置密码
  10. sqlserver安装显示句柄无效_句柄无效是什么意思 句柄无效怎么解决
  11. 计算机公式最小值,excel最小值函数
  12. 中蒙联合考古队发现青铜时代至清代岩画图案
  13. 服务器操作系统有哪些?
  14. To install it ,you can run npm i -- save vuetypesumd
  15. react-native播放视频组件 react-native-video的用法
  16. Games202作业1 Unity(更新完毕)
  17. 【bug】联想小新出现问题,你的PIN不可用。
  18. 第三次作业 - 结对项目1
  19. 任天堂推出《塞尔达传说》GAMEampWATCH游戏机,预计要在 2021 年 11 月 12 日推出塞尔达版本的 GAMEampWATCH
  20. Linux内核模块反编译,内核oops错误调试学习笔记

热门文章

  1. 2022华为中央媒体技术院AI算法工程师FindStar一面+二面+主管面
  2. 艺术饭+!真.艺术饭计划少儿版 ArtFin谈另一种家族资产
  3. Apache Iceberg 分区表探索与实践
  4. java8新特性【Lambda、Stream API、Optional、Date Time API 、并行流与串行流】
  5. 产品学习(二)——竞品分析
  6. 携程手机版国内机票数据
  7. AI人才招聘:年薪最高近百万,独角兽公司招算法工程师
  8. [附源码]JSP+ssm计算机毕业设计唐山极速速运冷库货物管理系统xf81q【源码、数据库、LW、部署】
  9. 自考数据结构知识点要点(2012版教材)
  10. 江西涉农县开展一对一指导服务 国稻种芯:重点保障水稻生长