微信 java抓取_【java】微信文章抓取
1.搜狗微信url解析
以搜索湖北师范大学为例:
请求的url为:
http://weixin.sogou.com/weixin?query=%E6%B9%96%E5%8C%97%E5%B8%88%E8%8C%83%E5%A4%A7%E5%AD%A6&sug_type=&sut=636&lkt=0%2C0%2C0&s_from=input&sug=y&type=2&sst0=1507963160393&page=1&ie=utf8&w=01019900&dr=1
其中有这样两个参数:
query=%E6%B9%96%E5%8C%97%E5%B8%88%E8%8C%83%E5%A4%A7%E5%AD%A6
page=1
query为请求的搜索内容(这里浏览器对中文做了编码转换);
page为当分页参数(直接搜索没有该参数,在点击下一页或者上一页后就有了)
这两个参数用作对搜索结果的控制。然后下一步进行链接提取。
2.微信文章链接提取
2.1 寻找文章url
这是搜索结果页面:
现在需要把每个标题对应的链接提取出来。
首先查看该页面的html源码,并找到标题所在的标签。
我们用win10自带浏览器Edge的检查元素功能,直接找到标题。
可以得到这样一个div标签:
其中a标签的href属性就是文章链接,h3中的文本内容为文章的标题,p标签内为文章内容截取,下一个div内有文章的发表时间和公众号名称等信息,这里只关注url,即href属性的值。
2.2 获取文章url
本次采用java获取url。
首先下载Jsoup包,该包提供了对html文档的解以及和jquery极为相似的语法选择器,用起来很方便。
我们需要导入4个jar包:
jsoup-1.10.3.jar
commons-logging-1.2.jar
httpclient-4.5.3.jar
httpclient-4.4.6.jar
(注:后两个包的下载地址:http://hc.apache.org/httpclient-3.x/ 该包对http客户端工具包,比jdk自带的好用一点)
1.首先获取搜索结果的页面Html源码:(关键代码)
public String getHtml(String url) throws IOException {
String html = "";
CloseableHttpClient httpClient = HttpClients.createDefault();// 创建httpClient对象
HttpGet httpget = new HttpGet(url);
try {
HttpResponse responce = httpClient.execute(httpget);//
int resStatu = responce.getStatusLine().getStatusCode();
if (resStatu == HttpStatus.SC_OK) {
HttpEntity entity = responce.getEntity();
if (entity != null) {
html = EntityUtils.toString(entity);// 获得html源代码
}
}
} catch (Exception e) {
System.out.println("访问 " + url + " 出现异常!");
e.printStackTrace();
} finally {
// 释放连接
httpClient.close();
}
return html;
}
(注:可以不用该方法获取html内容,直接用jsoup内的Jsoup.parse(url)方法也能)
2.然后将获取到的源码转换为Jsoup的Document对象(关键代码)
String SougouWechatHtml = htmlUtil.getHtml(SougouWechatUrl);
Document SougouWechatDoc = Jsoup.parse(SougouWechatHtml);
3.利用css语法选择器select获取url
Elements urls = SougouWechatDoc.select(".txt-box h3 a");
List sougouWechartList = new ArrayList<>();
for (Element url : urls) {
sougouWechartList.add(new SougouWechart(url.text(), url.attr("href")));
}
这样就获取到了一个文章Url集合。
获取的url列表:
下一步进行对文章内容的提取。
3.微信文章内容提取
首先还是分析页面元素。
我们以搜索到的第二条内容为例,这是文章内容的详情页:
我们要获取的就是红框里的内容。
同样的,用检查元素的方法找到标题:
< div id = “img-content” >这个div里的内容就是要获取的内容啦。
和获取链接的方法一样,还是先或去该页面的html源码,然后利用选择器找出里边的内容或属性的值。
Document wechartArticlDoc = Jsoup.parse(wechartArticleHtml);
Elements tittle = wechartArticlDoc.select(".rich_media_title");
Element author = wechartArticlDoc.select(".rich_media_meta.rich_media_meta_text").get(1);
Elements time = wechartArticlDoc.select(".rich_media_meta.rich_media_meta_text#post-date");
Elements content = wechartArticlDoc.select(".rich_media_content#js_content");
String alterContent = content.html().replace("data-src", "src");// 将属性data-src替换为src,否则图片不能正常显示
Elements publicSign = wechartArticlDoc.select(".rich_media_meta.rich_media_meta_text.rich_media_meta_nickname");
对于文章内容来说,如果想保留原来的排版样式,则获取html源码;如果只是想获取文本内容则用Jsoup的text()方法即可获取不包含标签元素的文本内容。
(注:在获取文章内容是发现,img标签内用的是data-src属性,不是src属性,所以会导致获取到的文章内容无法显示图片的问题,所以需要对文章内容中的data-src替换为src即可显示图片。
获取到的文章信息:
获取到的文章内容(源码)(放在了markdown中显示):
(注:获取到的内容大部分能正常显示,但有少部分会出现无法解析html的情况,比如这个)
4.下载
微信 java抓取_【java】微信文章抓取相关推荐
- 企业微信SCRM系统部署_企业微信SCRM二次开发_企业微信SCRM系统独立版源码价格
企业微信SCRM系统部署_企业微信SCRM二次开发_企业微信SCRM系统独立版源码价格 点趣互动是企业微信系统的第三方应用提供厂商,用于管理员工企业微信的内一款系统软件.点趣互动企业微信scrm软件主 ...
- java 微信群发多图文_[Java教程]httpClient实现微信公众号消息群发
[Java教程]httpClient实现微信公众号消息群发 0 2016-09-21 20:00:10 1.实现功能 向关注了微信公众号的微信用户群发消息.(可以是所有的用户,也可以是提供了微信ope ...
- java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习
本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...
- java this.val$_[Java教程]Jquery $(this).attr和$(this).val用法示例
[Java教程]Jquery $(this).attr和$(this).val用法示例 0 2017-08-17 17:00:11 以下是个人心得整理,有兴趣朋友可以参考参考 $(this).attr ...
- 企业微信加密消息体_企业微信机器人怎么发消息?企业微信机器人可以定时发消息吗?...
企业微信外部群自带群机器人功能,可以协助员工高效管理社群,帮助我们运营客户,那么企业微信机器人怎么用呢? 使用企业微信机器人,需要管理员先进入企业微信管理后台,在[客户联系]-[效率工具]-[自动回复 ...
- 卖了的微信能不能找回_购买微信号必看防止找回和封号
买微信号必看!防找回防盗防封号分三个步骤操作,防止找回和封号,必须先看这里:威信号登录了以后,除了改登录密码其他都不要改,也不要发朋友圈,因为这样做容易封号,要改资料的话登录1天后再改.也不要发朋友圈 ...
- java 文本压缩_[Java基础]Java使用GZIP进行文本压缩
import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...
- java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...
笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...
- java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件
注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...
- 苹果微信换行怎么打_苹果手机微信怎么加密,教你几招快速加密
微信是人们经常使用到的一种聊天工具了,可以说每个人的手机里面都安装的有微信app,并且很多人也有使用微信进行付款,在使用的过程中,人们也是非常注意微信的安全性的,而微信的安全性如何设置呢?苹果微信怎么 ...
最新文章
- 机器学习中的DCGAN-Tensorflow:用于更稳定的训练
- 线性代数的本质 - 02 - 线性组合、张成的空间与基
- python画图中grid等于true_Python3.0科学计算学习之绘图(二)
- postman--安装及Interceptor插件
- Ubuntu 16.04退出anaconda环境
- Python教学与学习过程中应注意的九句话
- 决策树CART算法讲解
- java web listener_JavaWeb:Listener
- ssh放行端口_安全组中已经添加规则放行SSH端口的访问之后使用f1 RTL的方法
- [leetcode-117]填充每个节点的下一个右侧节点指针 II
- 中级系统集成项目管理工程师考试记录之总述
- miniPCIE接口更换M.2/NGFF接口AX200无线网卡教程——华硕X450V笔记本更换intel AX200无线网卡
- Oracle数据库语句大全
- 少儿编程语言有哪些分类,分别适合多大年龄的学生?
- OAuth2 oauth_client_details表字段的详细说明
- 【转】数据恢复WINHEX教程
- 英文单词搜索之词霸搜索
- Python实训day08am【网络爬虫selenium、图像处理入门】
- zzulioj :2020新生赛:花海
- 从浏览器沦为系统毒瘤:无法禁用的IE背后,是几百亿的家族生意。。。
热门文章
- 使用 Kind 搭建你的本地 Kubernetes 集群
- 2018年手机ODM行业分析
- 安卓gridview控件的使用
- 2018年度中国IT行业杰出人物奖出炉
- 【光通信】布线时,什么情况用单模光纤,什么情况用多模光纤
- python extractor_Python extractor
- java中intern,在Java中什么时候使用String.intern()方法?
- 财报汇总 | 中国生物制药、格林酒店、海亮教育、洪恩教育等5家企业公布最新业绩...
- java流媒体直播_实时监控、直播流、流媒体、视频网站开发方案设计简要
- 李开复:几年内电子商务上市潮会来临