spider-java (Jsoup) (媒体信息的爬取)

2024-05-03 13:18
文章标签 java 媒体 信息 jsoup spider

本文主要是介绍spider-java (Jsoup) (媒体信息的爬取),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

媒体基础信息爬取实例

GetAppname.java (代码为hive的udf,静态页面的获取)
package com.hb.hive.utils;import java.util.Random;import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;public class GetAppname extends UDF {/*** 各大应用市场获取app名称* * @param Str* @return*/public Text evaluate(Object... args) {if (args.length == 1) {return new Text(getAppName(args[0].toString()));} else {return new Text(getAppName(args[0].toString()));}}public static String getAppName(String app_id) {try {int t =new Random().nextInt(10)*3000;System.out.println(t);Thread.sleep( t);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}String app_name = "";app_name = getAppNameByYingyongbao(app_id);if (app_name.equals("")) {app_name = getAppNameByXiaomi(app_id);if (app_name.equals("")) {app_name = getAppByWandoujia(app_id);if (app_name.equals("")&&app_id.matches("[0-9]+")) {app_name = getAppNameByAso100(app_id);}}}return app_name;}/*** from Yingyonggao* * @param app_id* @return*/public static String getAppNameByYingyongbao(String app_id) {try {Document doc = Jsoup.connect("http://android.myapp.com/myapp/detail.htm?apkName=" + app_id).get();Elements elementsByClass = doc.getElementsByClass("det-name-int");if (!elementsByClass.text().toString().equals("")) {return elementsByClass.text().toString();}} catch (Exception e) {System.out.println(e);return "";}return "";}/*** from Xiaomi* * @param app_id* @return*/public static String getAppNameByXiaomi(String app_id) {try {Document doc = Jsoup.connect("http://app.mi.com/details?id=" + app_id).get();Elements elementsByClass = doc.getElementsByClass("yellow-flower");if (!elementsByClass.attr("alt").equals("")) {return elementsByClass.attr("alt");}} catch (Exception e) {System.out.println(e);return "";}return "";}/*** from Aso100* * @param app_id* @return*/public static String getAppNameByAso100(String app_id) {try {Document doc = Jsoup.connect("https://aso100.com/app/rank/appid/" + app_id ).get();Elements elementsByClass = doc.getElementsByClass("name-str");if (!elementsByClass.text().toString().equals("")) {return elementsByClass.text().toString();}} catch (Exception e) {System.out.println(e);return "";}return "";}/*** from Wandoujia* * @param app_id* @return*/public static String getAppByWandoujia(String app_id) {try {Document doc = Jsoup.connect("http://www.wandoujia.com/apps/" + app_id).get();Elements elementsByClass = doc.getElementsByClass("app-name");if (!elementsByClass.text().toString().equals("")) {return elementsByClass.text().toString();}} catch (Exception e) {System.out.println(e);return "";}return "";}/*** from Itunes* * @param app_id* @return*/public static String getAppByItunes(String app_id) {try {Document doc = Jsoup.connect("https://itunes.apple.com/cn/app/id" + app_id).get();Elements elementsByClass = doc.getElementsByClass("artwork");if (!elementsByClass.attr("alt").equals("")) {return elementsByClass.attr("alt");}} catch (Exception e) {System.out.println(e);return "";}return "";}/*** from Googleplay 需要翻墙* * @param app_id* @return*/public static String getAppByGoogleplay(String app_id) {try {Document doc = Jsoup.connect("https://play.google.com/store/apps/details?id=" + app_id + "&hl=zh_CN").get();Elements elementsByClass = doc.getElementsByClass("id-app-title");if (!elementsByClass.text().toString().equals("")) {return elementsByClass.text().toString();}} catch (Exception e) {System.out.println(e);return "";}return "";}@SuppressWarnings("static-access")public static void main(String[] args) {
//		System.out.println(getAppByItunes("1000114190"));System.out.println(new GetAppname().getAppName("com.yr.mmpic"));
//		 System.out.println(new
//		 GetAppname().getAppByGoogleplay("com.mandongkeji.comiclover"));
//		 System.out.println(new
//		 GetAppname().getAppByWandoujia("com.mandongkeji.comiclover"));
//		 System.out.println(new
//		 GetAppname().getAppNameByAso100("com.mandongkeji.comiclover"));		}
}


结合phantomjs实现Jsoup动态页面的获取
phantomjs-2.1.1-macosx+java
具体的搭建方式请百度
参考: http://phantomjs.org/quick-start.html
在安装目录(/usr/local/share/phantomjs-2.1.1-macosx/code.js)下添加code.js用于获取动态页面
code.js
system = require('system')
address = system.args[1];
var page = require('webpage').create();
var url = address;
page.open(url, function (status) {//Page is loaded!if (status !== 'success') {console.log('Unable to post!');} else {window.setTimeout(function () {page.render("test1.png");  //截图console.log(page.content);phantom.exit();}, 5000);}});
执行命令获取动态页面:phantomjs ./phantomjs-2.1.1-macosx/code.js https://www.qimai.cn/andapp/baseinfo/appid/120023
具体结合方式参考
https://www.jianshu.com/p/96220e239c35

这篇关于spider-java (Jsoup) (媒体信息的爬取)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956836

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定