欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    java实现爬虫给app提供数据jsoup网络爬虫.docx

    • 资源ID:26958539       资源大小:19.18KB        全文页数:11页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java实现爬虫给app提供数据jsoup网络爬虫.docx

    1、java实现爬虫给app提供数据jsoup网络爬虫java实现爬虫给app提供数据(jsoup网络爬虫) 需求 #最近基于 Material Design 重构了自己的新闻 App,数据来源是个问题。有前人分析了知乎日报、凤凰新闻等 API,根据相应的 URL 可以获取新闻的 JSON 数据。为了锻炼写代码能力,笔者打算爬虫新闻页面,自己获取数据构建 API。本文链接 转载请注明出处效果图下图是原网站的页面 爬虫获取了数据,展示到 APP 手机端爬虫思路Created with Rapha?l 2.1.0开始基于Get请求获取URL对于的网页Html利用Jsoup把Html解析为Documen

    2、t利用Dom的getElementsById等方法获取标题、发布时间、内容等根据标题、发布时间、内容构建javabean给APP使用结束关于 App 的实现过程可以参看这几篇文章,本文主要讲解一下如何爬虫数据。Android 下如何录制App操作生成Gif动态图 Android Material Design学习之RecyclerView代替 ListView 仿网易新闻的页面(ViewPager作为RecyclerView的Header) Jsoup 简介Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址、HTML文本内容。Jsoup主要有以下功能:- 从一个URL

    3、,文件或字符串中解析HTML;- 使用DOM或CSS选择器来查找、取出数据;- 对HTML元素、属性、文本进行操作;- 清除不受信任的HTML (来防止XSS攻击)到官网下载相应的Jsoup依赖包 http:/jsoup.org/download爬虫过程Get 请求获取网页 HTML新闻网页Html的DOM树如下所示:下面这段代码根据指定的 url,用代码获取get 请求返回的 html 源代码。public static String doGet(String urlStr) throws CommonException URL url; String html = ; try url =

    4、new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(GET); connection.setConnectTimeout(5000); connection.setDoInput(true); connection.setDoOutput(true); if (connection.getResponseCode() = 200) InputStream in = connection.getInputStrea

    5、m(); html = StreamTool.inToStringByByte(in); else throw new CommonException(新闻服务器返回值不为200); catch (Exception e) e.printStackTrace(); throw new CommonException(get请求失败); return html;1234567891011121314151617181920212223InputStream in = connection.getInputStream();将得到输入流转化为字符串是个普遍需求,我们将其抽象出来,写一个工具方法。p

    6、ublic class StreamTool public static String inToStringByByte(InputStream in) throws Exception ByteArrayOutputStream outStr = new ByteArrayOutputStream(); byte buffer = new byte1024; int len = 0; StringBuilder content = new StringBuilder(); while (len = in.read(buffer) != -1) content.append(new Strin

    7、g(buffer, 0, len, UTF-8); outStr.close(); return content.toString(); 1234567891011121314解析 HTML 获取标题利用 google 浏览器的审查元素,找出新闻标题对于的html 代码: 关于举办经典音乐作品欣赏与人文审美讲座的通知 1234567我们需要从上面的 HTML 中找出id=article_title的部分,使用 getElementById(String id) 方法String htmlStr = HttpTool.doGet(urlStr);/ 将获取的网页 HTML 源代码转化为 Docu

    8、mentDocument doc = Jsoup.parse(htmlStr);Element articleEle = doc.getElementById(article);/ 标题Element titleEle = articleEle.getElementById(article_title);String titleStr = titleEle.text();123456789获取发布日期、信息来源同样找出对于的 HTML 代码 2015-05-28 来源: 浏览次数: 477 1234567891011思路也和上面类似,使用 getElementById(String id) 方

    9、法找出id=article_detail为Element,再利用getElementsByTag获取span 部分。因为一共有3个 . ,所以返回的是Elements而不是Element。/ article_detail包括了 2016-01-15 来源: 浏览次数:177Element detailEle = articleEle.getElementById(article_detail);Elements details = detailEle.getElementsByTag(span);/ 发布时间String dateStr = details.get(0).text();/ 新闻

    10、来源String sourceStr = details.get(1).text();12345678910解析浏览次数如果打印出上面的details.get(2).text(),只会得到浏览次数:1没有浏览次数?为什么呢?因为浏览次数是JavaScript 渲染出来的, Jsoup爬虫可能仅仅提取HTML内容,得不到动态渲染出的数据。解决方法有两种在爬虫的时候,内置一个浏览器内核,执行js渲染页面后,再抓取。这方面对应的工具有Selenium、HtmlUnit或者PhantomJs。可以查看这篇文章 抓取前端渲染的页面 http:/webmagic.io/docs/zh/posts/chx-

    11、cases/js-render-page.html。所以分析JS请求,找到对应数据的请求url如果你访问上面的 urldocument.write(478)1这个478就是我们需要的浏览次数,我们对上面的url做get 请求,得到返回的字符串,利用正则找出其中的数字。/ 访问这个新闻页面,浏览次数会+1,次数是 JS 渲染的String jsStr = HttpTool.doGet(COUNT_BASE_URL + currentPage);int readTimes = Integer.parseInt(jsStr.replaceAll(D+, );/ 或者使用下面这个正则方法/ Strin

    12、g readTimesStr = jsStr.replaceAll(0-9, );123456解析新闻内容笔者本来是获取新闻内容纯文字的形式,但后来发现 Android 端也可以显示 CSS 格式,所以后来内容保留了 HTML 格式。Element contentEle = articleEle.getElementById(article_content);/ 新闻主体内容String contentStr = contentEle.toString();/ 如果用 text()方法,新闻主体内容的 html 标签会丢失/ 为了在 Android 上用 WebView 显示 html,用to

    13、String()/ String contentStr = contentEle.text();123456解析图片 Url注意一个网页上大大小小的图片很多,为了只获取新闻正文中的内容,我们最好首先定位到新闻内容的Element,然后再利用getElementsByTag(“img”)筛选出图片。Element contentEle = articleEle.getElementById(article_content);/ 新闻主体内容String contentStr = contentEle.toString();/ 如果用 text()方法,新闻主体内容的 html 标签会丢失/ 为了

    14、在 Android 上用 WebView 显示 html,用toString()/ String contentStr = contentEle.text();Elements images = contentEle.getElementsByTag(img);String imageUrls = new Stringimages.size();for (int i = 0; i imageUrls.length; i+) imageUrlsi = images.get(i).attr(src);123456789101112新闻实体类 JavaBean上面获取了新闻的标题、发布日期、阅读次数

    15、、新闻内容等等,我们自然需要构造一个 javabean,把获取的内容封装进实体类中。public class ArticleItem private int index; private String imageUrls; private String title; private String publishDate; private String source; private int readTimes; private String body; public ArticleItem(int index, String imageUrls, String title, String pu

    16、blishDate, String source, int readTimes, String body) this.index = index; this.imageUrls = imageUrls; this.title = title; this.publishDate = publishDate; this.source = source; this.readTimes = readTimes; this.body = body; Override public String toString() return ArticleItem index= + index + ,n image

    17、Urls= + Arrays.toString(imageUrls) + ,n title= + title + ,n publishDate= + publishDate + ,n source= + source + ,n readTimes= + readTimes + ,n body= + body + ; 12345678910111213141516171819202122232425262728293031测试public static ArticleItem getNewsItem(int currentPage) throws CommonException / 根据后缀的数

    18、字,拼接新闻 url String urlStr = ARTICLE_BASE_URL + currentPage + .html; String htmlStr = HttpTool.doGet(urlStr); Document doc = Jsoup.parse(htmlStr); Element articleEle = doc.getElementById(article); / 标题 Element titleEle = articleEle.getElementById(article_title); String titleStr = titleEle.text(); / ar

    19、ticle_detail包括了 2016-01-15 来源: 浏览次数:177 Element detailEle = articleEle.getElementById(article_detail); Elements details = detailEle.getElementsByTag(span); / 发布时间 String dateStr = details.get(0).text(); / 新闻来源 String sourceStr = details.get(1).text(); / 访问这个新闻页面,浏览次数会+1,次数是 JS 渲染的 String jsStr = Htt

    20、pTool.doGet(COUNT_BASE_URL + currentPage); int readTimes = Integer.parseInt(jsStr.replaceAll(D+, ); / 或者使用下面这个正则方法 / String readTimesStr = jsStr.replaceAll(0-9, ); Element contentEle = articleEle.getElementById(article_content); / 新闻主体内容 String contentStr = contentEle.toString(); / 如果用 text()方法,新闻主体

    21、内容的 html 标签会丢失 / 为了在 Android 上用 WebView 显示 html,用toString() / String contentStr = contentEle.text(); Elements images = contentEle.getElementsByTag(img); String imageUrls = new Stringimages.size(); for (int i = 0; i imageUrls.length; i+) imageUrlsi = images.get(i).attr(src); return new ArticleItem(cu

    22、rrentPage, imageUrls, titleStr, dateStr, sourceStr, readTimes, contentStr);public static void main(String args) throws CommonException System.out.println(getNewsItem(7928);1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950输出信息ArticleItem index=7928, imageUrls

    23、=/uploads/image/20160114/20160114225911_34428.png, title=电院2014级开展“让诚信之花开遍冬日校园”教育活动, publishDate=2016-01-14, source=来源: 电影新闻网, readTimes=200, body= 西电新闻网讯 (通讯员 丁彤 王朱丹.)123456789展望本文讲解了如何实现Jsoup 网络爬虫,如果文章对您有帮助,感谢捐赠。最近用 Material Design 重构了自己的新闻 App,新闻数据是利用 Jsoup 实现的。第1版爬虫是在手机端实现的(我承认这设计很不好,既费流量又增加客户端负担),后来在新浪云上实现了一个简单的 JSP ,过滤了原网页的图片、一级栏目等,只返回新闻标题、阅读次数、新闻内容等等。本文链接 转载请注明出处后期的打算是把爬虫这步移到新浪云上,返回格式化的 JSON 数据给客户端使用。可能的话,图片使用七牛CDN(Content Delivery Network 内容分发网络),在云上利用 Mysql 数据库缓存新闻信息。参考文章Android网络爬虫程序(基于Jsoup)http:/songlee24.github.io/2015/01/11/android-crawler/ 抓取csdn上的各类别的文章 (制作csdn app 二)


    注意事项

    本文(java实现爬虫给app提供数据jsoup网络爬虫.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开