轻松学会使用JSoup爬取微信公众号文章,实现高效获取信息!

优采云 发布时间: 2023-04-06 00:12

  JSoup 是一款 Java 的 HTML 解析器,可以直接解析 HTML 和 XML 文档。在网络爬虫开发中,JSoup 的使用非常广泛。本文将以 JSoup 爬取微信公众号文章为例,详细介绍 JSoup 的使用方法。

  1.概述

  微信公众号是一个非常重要的社交媒体平台,对于企业和个人而言都有着重要的意义。但是,由于微信公众号的限制,我们只能在微信客户端内查看文章,并不能直接复制粘贴。如果想要获取某篇文章的全部内容,就需要借助爬虫技术来实现。

  2.获取文章链接

  首先,我们需要获取微信公众号文章的链接。这一步可以通过以下两种方式来实现:

  2.1手动获取

  我们可以在微信客户端打开某篇文章,在“分享”中选择“复制链接”,然后将链接粘贴到浏览器中打开。

  2.2自动获取

  我们可以通过模拟登陆微信公众平台,并从历史消息中获取所有文章链接。这种方式需要用到 Selenium 等工具,不过本文不做过多讲解。

  3.解析 HTML

  

  无论是手动获取还是自动获取文章链接,我们都需要对网页进行解析。这里我们使用 JSoup 来解析 HTML。

  代码如下:

  

Document doc = Jsoup.connect(url).get();

  其中,`url`是文章链接,`doc`是解析后的文档对象。我们可以通过`doc`对象来获取文章标题、发布时间、正文等信息。

  4.获取文章标题

  获取文章标题非常简单,只需要使用以下代码即可:

  

String title = doc.select("h2.rich_media_title").text();

  5.获取发布时间

  获取发布时间也很简单,只需要使用以下代码即可:

  

  

String date = doc.select("em#post-date").text();

  6.获取正文

  获取正文是本文的重点,我们需要用到 JSoup 的一些高级选择器。具体步骤如下:

  6.1删除无关元素

  首先,我们需要删除一些无关元素,比如广告、二维码等。我们可以通过以下代码来实现:

  

doc.select("div#js_content div.qq_map").remove();//删除地图

doc.select("div#js_content #js_pay_area").remove();//删除付费区域

doc.select("div#js_content #js_sg_bar").remove();//删除分享栏

doc.select("div#js_content .qr_code_pc_outer").remove();//删除二维码

doc.select("div#js_content #js_toobar3").remove();//删除推荐栏

  6.2处理图片

  接下来,我们需要处理文章中的图片。由于微信公众号的图片都是经过加密处理的,因此我们需要对图片链接进行解密。具体步骤如下:

  

Elements imgs = doc.select("div#js_content img[data-src]");

for (Element img : imgs){

String imgSrc = img.attr("data-src");

if (imgSrc.startsWith("//")){

imgSrc ="https:"+ imgSrc;

}

String imgUrl = Jsoup.connect(imgSrc).ignoreContentType(true).execute().url().toString();

img.attr("src", imgUrl);

img.removeAttr("data-src");

}

  

  6.3处理视频

  如果文章中包含视频,我们也需要对视频链接进行解密。这里我们需要用到微信公众平台的 API,具体步骤如下:

  

Elements videos = doc.select("div#js_content iframe[src^='https://mp.weixin.qq.com/mp/videoplayer']");

for (Element video : videos){

String vid = video.attr("data-vid");

String url ="https://mp.weixin.qq.com/mp/videoplayer?action=get_mp_video_play_url&preview=0&__biz="+ biz +"&mid="+ mid +"&idx="+ idx +"&vid="+ vid +"&uin=&key=&pass_ticket=&wxtoken=&appmsg_token=&x5=1&f=json";

String result = Jsoup.connect(url).ignoreContentType(true).execute().body();

JSONObject json = new JSONObject(result);

String playUrl = json.getString("url_info").replaceAll("\\\\","");

video.attr("src", playUrl);

}

  其中,`biz`、`mid`和`idx`分别是公众号的一些参数,可以从文章链接中解析出来。

  6.4获取正文内容

  经过前面的处理后,我们就可以直接获取正文内容了。具体步骤如下:

  

StringBuffer sb = new StringBuffer();

Elements elements = doc.select("div#js_content >*");

for (Element element : elements){

if ("section".equals(element.tagName())){

sb.append(element.text()).append("\n\n");

} else if ("p".equals(element.tagName())){

sb.append(element.text()).append("\n\n");

} else if ("img".equals(element.tagName())){

sb.append("<img src=\"").append(element.attr("src")).append("\"/>\n\n");

} else if ("iframe".equals(element.tagName())){

sb.append("<iframe src=\"").append(element.attr("src")).append("\"></iframe>\n\n");

}

}

String content = sb.toString();

  7.总结

  通过以上步骤,我们就可以使用 JSoup 来爬取微信公众号文章了。当然,由于微信公众平台的不断更新,以上代码可能会出现一些问题。但是,本文所介绍的方法和思路是通用的,只需要稍作调整即可适用于其他网站。

  8.优采云

  如果你想要拥有更好的 SEO 优化效果,可以尝试使用优采云。优采云是一款专业的 SEO 工具,可以帮助你分析关键词、优化标题和正文等内容,从而提高网站的排名。更多详情请访问 www.ucaiyun.com。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线