通过htmlparse动态抓取微信公众号的文章

iframe嵌入微信公众号页面(有图片) iframe展示微信公众号文章,有图片,包括背景图片 阅读详情
    真的是很久没有更新我的博客了,刚开始,我还真的不知道爬虫是什么东西,但是由于项目需要,老板要我做个简单的爬虫,就是去人家的微信公众号去把里面的文章动态的抓取下来,当听到这个事情的时候,我是激动的,因为要我接触一个未知的领域,这是一个很值得装逼的是!!!!
    好了屁话就不多逼逼了。首先呢,我是通过搜狗来找到微信公众号的,因为搜狗那边比较容易入手,可以绕过校验。但是我估计也是时日不长。在这之前,我们需要用到htmlparser这个类来操作,可以在maven里面配置:

这里写图片描述
也可以通过去下载jar包

我们现在抓取这个公众号:http://weixin.sogou.com/weixin?type=1&query=%E5%B0%9A%E6%B1%87%E5%9F%8E&ie=utf8&_sug_=n&_sug_type_=,然后用浏览器打开打开源代码来产看进入这个公众号文章的那个连接,然后进行分析:

这里写图片描述

我们可以看到它的onclick事件之后是跳转到一个文章列表,所以我们要首先拿到那个连接,进入连接后是文章列表:

这里写图片描述

接下来就像上一步一样打开源代码分析:每一篇文章都有一个连接,只要截取到这个连接即可:
这里写图片描述
接下来就是点击其中一篇文章进去,然后在进行分析,可以看到文章的详情都有一个id = js_content的一个div,接下来就是根据这个id来获取文章内容

所有代码如下:

private List<At> fetchArticles(String url) throws Exception {
        List<At> ats = new ArrayList<At>();
        String h1 = getHtml(url);
        Parser parser = new Parser(h1, null);
        NodeList nl = parser.extractAllNodesThatMatch(new NodeFilter() {

            @Override
            public boolean accept(Node node) {
                // TODO Auto-generated method stub
                if (node instanceof Div) {
                    Div shc = (Div) node;
                    String onclick = shc.getAttribute("onclick");
                    if (onclick != null && onclick.contains("gotourl(")) {
                        return true;
                    }
                }
                return false;
            }

        });

//获取文章列表
        if (nl != null && nl.size() > 0) {
            Div shc = (Div) nl.elementAt(0);
            String urlL1 = shc.getAttribute("href");
            if (StringUtil.isNotEmpty(urlL1)) {
                urlL1 = decode(urlL1);
                System.out.println("goto:" + urlL1);

                String html = getHtml(urlL1);
                if (StringUtil.isNotEmpty(html)) {
                    String[] arr = html.split("\\\\/s\\?timestamp=");
                    if (arr.length > 1) {
                        for (int i = 1; i < arr.length; i++) {
                            // for (int i = 1; i < 5; i++) {
                            String s2 = arr[i];
                            String[] arr3 = s2.split("&quot;,&quot;source_url");
                            if (arr3.length == 2) {
                                String urlL3 = ("http://mp.weixin.qq.com/s?timestamp=" + decode(arr3[0].trim()));
                                System.out.println("goto:" + urlL3);
                                //获取文章的详情
                                At at = getArticleByUrl(urlL3);
                                if (at != null) {
                                    ats.add(at);
                                }

                            }
                        }
                    }

                }
                // System.out.println(arr.length);
            }
        }
        return ats;
    }

以下是上面方法调用到的方法:

//获取html源码
public static String getHtml(String url) {
        try {
            HttpClient httpclient = new HttpClient();
            GetMethod method = new GetMethod(url);
            httpclient.executeMethod(method);
            return method.getResponseBodyAsString();
        } catch(Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

获取文章详情方法:

@Override
    public At getArticleByUrl(String url) {
        // TODO Auto-generated method stub
        String s3 = getHtml(url);
        try {
            Parser parser = new Parser(s3, null);
            NodeList titles = parser.extractAllNodesThatMatch(new NodeFilter() {

                @Override
                public boolean accept(Node node) {

                    if (node instanceof TitleTag) {
                        return true;
                    }
                    return false;
                }

            });
            if (titles != null && titles.size() > 0) {
                String title = titles.elementAt(0).toPlainTextString();
                At at = new At();
                at.setTitle(title);
                parser = new Parser(s3, null);
                NodeList contents = parser.extractAllNodesThatMatch(new NodeFilter() {

                    @Override
                    public boolean accept(Node node) {
                        // TODO Auto-generated method stub
                        if (node instanceof Div && "js_content".equals(((Div) node).getAttribute("id"))) {
                            return true;
                        }
                        return false;
                    }

                });
                if (contents != null && contents.size() > 0) {
                    String body = contents.elementAt(0).toHtml();
                    at.setContent(body);
                }
                if(StringUtil.isNotEmpty(at.getContent())) {
                    parser = new Parser(at.getContent(), null);
                    NodeList imgs = parser.extractAllNodesThatMatch(new NodeFilter() {

                        @Override
                        public boolean accept(Node node) {
                            // TODO Auto-generated method stub
                            if (node instanceof ImageTag) {
                                return true;
                            }
                            return false;
                        }

                    });
                    if (imgs != null && imgs.size() > 0) {
                        int start = 0;
                        if(imgs.size() > 1) {
                            start = 1;
                        }
                        for(int i=start; i<imgs.size(); i++) {
                            ImageTag img = ((ImageTag)imgs.elementAt(i));
                            if(StringUtil.isNotEmpty(img.getAttribute("data-src"))) {
                                at.setThumb(img.getAttribute("data-src"));
                                break;
                            }
                        }

                    }
                }


                return at;
            }
        } catch(Exception ex) {
            log.error(ex.getMessage(), ex);
        }

        return null;
    }

有时候当点击那个公众号进去之后是一个验证页面:
这里写图片描述

这个不要紧的,点多几次就可以了。

这是调用:
这里写图片描述
要注意框框的那个代码,如果不要的话好像会不行,应该是因为tomcat里面不能直接翻译中文,所以要进行转码。

虚拟化Esxi 和 华为交换机--配置链路捆绑 在这种模式下,Eth-Trunk的建立和成员接口的加入都需要手工配置,没有LACP协议的参与。● 在没有配置802.3ad聚合时,启用基于IP哈希的路由将中断网络,因此必须先对虚拟交换机进行更改。再去修改交换机的链路聚合模式(交换机配置为手动模式的链路聚合)当服务器需要通过交换机从远端服务器获取配置文件后才可以启动链路聚合时,交换机的链路聚合口需要配置lacp force-forward。● 交换机必须设置手动模式的链路聚合,虚拟交换机的负载平衡方法必须设置为基于IP哈希的路由。 阅读详情

相关推荐

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

java解析html之HTMLparser初次尝试

1. HtmlParser 简介 htmlparser是一个纯的java写的html解析的库,主要用于改造或提取html。用来分析抓取到的网页信息是个不错的选择,遗憾的是参考文档太少。 项目主页: http://htmlparser.sourceforge.net/ API文档: http://htmlparser.sourceforge.net/javadoc/index.html

fancy3013的博客 8965

电磁波成像技术全解析:从γ射线到无线电波的应用实践

本文全面解析电磁波成像技术,从γ射线到无线电波的应用实践。详细介绍了不同波长电磁波的特性与实用场景,包括医疗影像、工业检测、安防监控等领域。特别探讨了X射线、红外热成像、毫米波雷达等前沿技术的实战应用,为读者提供技术选型指南和操作技巧。

weixin_29305337的博客 293

python学习笔记16:HTMLParser

目的:将我喜欢的公众号文章保存为Word,以方便阅读,使用html.parser中的HTMLParser对网页进行解析,并使用docx中的Document将解析结果保存到word中 HTMLParser类定义及常用方法 标准库中的定义 class html.parser.HTMLParser(*, convert_charrefs=True) HTMLParser主要是用来解析HTML文件(包括...

yaoliuwei1426的博客 605

在带有Intel Arc GPU的Windows上安装IPEX-LLM

本文将介绍在 Intel Arc GPU 环境下安装 IPEX-LLM。

wux_labs的博客 1636

【HDLBits实战】从真值表到最优电路:SOP与POS形式在ECE241考题中的精妙应用

本文以HDLBits平台上的ECE241考题为例,详细讲解了如何从真值表出发,利用卡诺图化简技术,推导出最优的积之和(SOP)与和之积(POS)逻辑表达式。文章重点剖析了如何处理“无关项”以简化电路,并通过Verilog代码实现对比,阐述了SOP与POS形式在数字电路设计中的精妙应用与实战价值。

z2a3b4c5d的博客 216

关于微信公众号文章编辑器不能直接编辑html样式的处理方法

1、微信的后台是不支持html编辑的;你可以先在其他的编辑器里面编辑好了以后,复制到微信编辑器里面;这样既可以保持原来的格式,还可以自由设置自己的喜欢的格式。 比如我有一大大大大大大大大大大大段话,不想让他在页面上全部展示,只给他一个区域,让他 显摆,然后用户可以手动的滑动此区域来观看所有的内容。 2、寻找一款编辑器(百度一大堆),确保编辑器上有截图中红框功能(这里推荐UEditor ,不要问...

mosowe 3万+

用Matlab机器人工具箱搞定六轴机械臂建模:从DH参数到3D可视化(附完整代码)

本文详细介绍了如何使用Matlab机器人工具箱进行六轴机械臂建模,涵盖从DH参数转换到3D可视化的完整流程。通过正运动学验证、逆解计算和工作空间分析等实战案例,帮助开发者快速掌握机械臂建模技巧,并提供性能优化建议和完整代码示例。

weixin_28733637的博客 361

微信公众号如何插入html,教你如何在微信公众号优雅的展示代码

最近在微信公众号上记录自己的技术成长以及面试经历,在添加代码块的时候,尝试了很多种方式,都无法很友善的显示代码,对于代码的换行和样式感到头大,对这个排版问题,苦恼了很久。刚开始有在各种微信公众号编辑器里插入代码然后进行复制,然而都不尽人意,需要自己不断的调整代码格式,并且把代码复制进微信公众号上会发现上下的空格居然可以这么大!!!严重影响到了浏览效果,果断放弃。接着在网上寻找各种帮助,各种分享。看...

weixin_29527111的博客 8246

核心组件大换血:Backbone与Neck魔改篇:YOLO26魔改Neck:引入BiFPN(双向特征金字塔),多尺度融合能力飙升

本文深入解析了YOLO26目标检测模型中Neck部分的优化策略,重点探讨了BiFPN(双向特征金字塔网络)的原理与实现。文章首先指出YOLO26原生FPN+PAN结构在多尺度特征融合上的局限性,特别是在小目标检测和边缘部署场景中的性能瓶颈。随后系统梳理了Neck网络的演进历程,从FPN、PANet到BiFPN和ASFF,详细对比了各架构的特点。核心部分展示了如何将BiFPN引入YOLO26,包括可学习权重融合、双向跨尺度连接等关键技术实现,并提供了PyTorch代码示例。本文为需要提升小目标检测性能或优化边

ZDQ58818的博客 246

【openGauss实战1】openGauss基于CentOS8的部署

基于openGauss数据库在CentOS8上的安装实践。

IT邦德 3050

html转微信公众号,通过htmlparse动态抓取微信公众号的文章

真的是很久没有更新我的博客了,刚开始,我还真的不知道爬虫是什么东西,但是由于项目需要,老板要我做个简单的爬虫,就是去人家的微信公众号去把里面的文章动态的抓取下来,当听到这个事情的时候,我是激动的,因为要我接触一个未知的领域,这是一个很值得装逼的是!!!!好了屁话就不多逼逼了。首先呢,我是通过搜狗来找到微信公众号的,因为搜狗那边比较容易入手,可以绕过校验。但是我估计也是时日不长。在这之前,我们需要用...

weixin_30217001的博客 776

Agent智能体:核心概念与架构——建立系统认知

本文摘要介绍了Agent智能体的核心概念与架构设计。主要内容包括: Agent定义与分类:阐述了Agent作为能够感知环境、决策执行的智能实体,重点分析了现代基于大语言模型(LLM)的Agent架构。 核心模块组成:详细说明了Agent的五大核心模块(感知、规划、记忆、工具和执行)及其交互流程。 UML建模展示:通过类图和序列图,清晰呈现了Agent系统的静态结构和动态执行过程。 项目结构设计:给出了模块化的代码目录结构,为实际开发提供参考框架。

lza_csdn2019的博客 634

html用于公众号排版

添加颜色">这是第一行文字。

Raysrsr的博客 457

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

微信公众号图片防盗链机制的应对办法^-^

首先将:http://mmbiz.qpic.cn 替换为:http://read.html5.qq.com/image?src=forum&q=5&r=0&imgflag=7&imageUrl=http://mmbiz.qpic.cn 也就是假如图片原来的HTML代码是这样的: 然后我们就用ctrl+h替换成: 最后记得加上一句Meta:   大功告成!

青草 绿叶 百合 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

微信公众号添加html,微信公众号如何在文章里添加超链接的方法教程

现在随着微信的普遍使用,越来越多的人都申请了自己的公众号,在里面发布一些文章, 视频 之类的东西。有朋友在问,微信公众号发布的文章怎么添加超链接呢?下面小编也带来了具体的操作方法,一起来看看吧。微信公众号文章加超链接方法介绍:第一步:点击图文编辑器顶部超链接图标插入。编辑图文消息时,点击图文消息编辑器顶部超链接图标进行插入。第二步:直接输入链接插入文章。点击超链接图标后,可直接输入链接和对应的文本...

weixin_35639750的博客 5506

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HTML5仿微信公众号界面

jQuery连接:https://pan.baidu.com/s/1Qj948NPMDmcqzcMyKm8nMw 密码:vewr 图片连接:https://pan.baidu.com/s/1Fhaw77EtQxC2Zgc6lY6y7g 密码:jyd1 HTML代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/...

weixin_34015566的博客 3761

因为jsoup,再见了我的htmlparser

jsoup,一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 这里是jsoup的API文档链接:https://jsoup.org/apidocs/ 前几天还在使用htmlparser来爬虫的我,现在我要因为jsoup跟htmlparser道别了,毕竟ht

ricky73999的博客 9441

微信阅读html,微信公众号文章查看HTML代码(HTML代码修改方法)

但是微信公众号自带的编辑器并不支持插入代码,我们今天来介绍一个小技巧,教大家查看微信公众号文章查看HTML代码,以及修改文章HTML代码方法。一、查看微信文章HTML代码方法如果要查看某篇公众号文章的代码,十分简单。先用PC电脑版微信打开这篇文章,复制文章的链接。使用135编辑器的文章导入功能,将文章导入到编辑器中。导入完成后,点击工具栏的【HTML 源代码】按钮。切换到HTML代码模式,在这里我...

weixin_39631689的博客 3755

html代码_公众号文章怎么看html代码?如何通过代码使用排版样式?

公众号自带的编辑器不太好用,不能使用好看的排版样式,所以出现了很多第三方编辑器。每个编辑器不一样,排版样式自然也不同,小伙伴们平时使用什么编辑器呢?如果碰到其它好看的排版样式会更换编辑器吗?今天壹姐给大家分享一个利用HTML代码插入排版样式的小技巧,大家在别的公众号看到喜欢的样式可以复制代码,然后加入到自己的公众号使用。学会了利用代码插入样式,不用换编辑器也可以用到各种心仪的排版样式!赶...

weixin_39772651的博客 2532

python爬取微信公众号文章(包含文章内容和图片)

之前虽然做过网页爬取,但微信爬取一直没做过,因为我一直不知道网页可以进微信公众平台,只用过微信客户端进微信公众号。既然可以通过网页进微信公众平台,那么爬取微信公众号文章就流程上就没太多难度了。 自己在网上找的一些python爬虫文章不太好用,就亲自写了一套,包括详细的页面附图和代码注释,代码复制下来后可以直接运行,供需要的同行参考交流。 爬取微信公众号文章之前,需要先申请微信公...

weixin_41267342的博客 2万+

微信文章采集问题揭秘:HTML结构VS图片链接,你中招了吗?

微信无法采集文章的问题微信作为颇具影响力的社交平台之一,其海量用户无疑为众多个体及企业提供了有效的信息传播与产品推广途径。然而,在使用过程中却常常遭遇文章采集异常的问题,使得预览文章残缺或显示出错,这无疑给我们的宣传推广工作带来诸多不便。故此,本文将探讨微信为何无法正常采集文章以及相应的解决策略。

O01U1fVP的博客 514

Html 部分基础标签,微信公众号前端开发

< h3> 三级标题< h4> 四级标题< h5> 五级标题< h6> 六级标题上述六个标题的默认样式不一样标题编号越小,字体就越大越粗,可以通过 CSS 来修改样式例:刷新页面:链接标签< a> 表示链接 (link),一点击就能跳转到某个页面通过 href 属性来确定跳到哪里去~属性都是放在开始标签中的,每个标签都可以有很多属性例:点我跳转啦~刷新页面:其他标签< image>标签不需要闭合标签;表示一张图片通过 src 属性,来确定照片的地址若一个页面中带有 image 标签,浏览器就会自动给服务器再

2301_79098332的博客 1380

如何提取微信公众号文章里边的视频地址

1.首先,找到含视频的公众号文章,复制文章链接地址。2.在电脑端浏览器打开这个链接,在网页空白位置点击右键,然后点击“查看网页源代码”。3.在打开的源代码网页里Ctrl+F 输入 v.qq.com(腾讯视频的都是以这个开头的),找到在src后面的链接。4.  https://v.qq.com/x/page/*****.html ,这个是腾讯视频网址的标准格式,把刚才复制的vid编号替换网址中的星号...

顾曲周郞的博客 4万+

织梦仿微信公众号文章页面html,织梦DEDECMS微信内容页插件

插件名称:织梦DEDECMS微信内容页插件插件介绍织梦DEDECMS微信内容页插件是一个安装后,通过微信访问你的网页时展示为微信公众号里面的文章的样式,提高用户体验。特色:1.支持图片点击放大预览2.结合打赏插件可以实现赞赏功能3.只在微信浏览器下显示该样式,不影响原手机版安装好插件后,在你的内容页模板(例如article_article.htm)中的head标签里插入以下内容:function ...

weixin_39849239的博客 710

在微信公众号中写html代码吗,微信公众号内容如何利用html编辑?

微信公众号内容如何利用html编辑?以下是小编整理的怎么利用html代码去更换微信公众号里的内容,有需要的朋友们请往下看具体怎么去操作的。以下内容供大家参考。登录微信公众号点击左侧分类的“素材管理”,在出现的页面中选择“图片”点击右侧的“本地上传”在弹出的对话框中找到你要上传的图片,选中后点击下面的“打开”按钮之后你的公众号图片就已经上传成功了,把鼠标放在图片上右键单击,在出现的菜单中选择“复制图...

weixin_29062963的博客 5717
上一篇: struts,ajax,json的结合老出错
Logan_Su
博客等级 码龄11年 5粉丝 9原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值