基于Java的阿里妈妈数据抓取技术

阿里妈妈按关键字或网址搜索商品 API(alimama.item_search) 这个API可以帮助广告主在投放广告时,根据关键词找到相关的商品信息,以便更精准地定位广告受众。:每次调用API前,你需要使用App Key和App Secret获取一个授权令牌(auth token)。:创建应用后,你将获得一个App Key和App Secret,这两个凭证将用于获取授权令牌(auth token)。:首先,你需要在阿里妈妈开放平台上注册一个开发者账号,并创建应用以获取API调用权限。:API将返回一个JSON格式的响应,你需要解析这个响应以获取搜索结果。 阅读详情

基于Java的阿里妈妈数据抓取技术

前言:

    对于需要登录的网站爬虫最大的困难就是需要登录,然后才能获取到数据,如微博,阿里妈妈,webqq等。之前也有看过使用浏览器登录到网站后直接从浏览器中获取cookie的文章,这不失为一种解决方案,但是当cookie失效时就需要再次获取,比较麻烦,那有没有能有自动登录,然后在爬取数据的技术呢,这就是本文研究的重点,好啦不扯淡了,开始进入正题吧。

技术要点:java + Phantomjs+httpclient

思路:

     1.需要借助一些工具获取登录的cookie,在做后续操作,这里就使用phantomjs来获取,其实phantomjs就是一个没有界面的浏览器,它提供了一些js的接口操作该浏览器,http://phantomjs.org/download.html这个链接就是该浏览器的链接,大家需要可以在这里下载。

2.由于phantom也可以直接发送post,get请求,但是解析起来比较慢,所以这里就只是在登录时使用该插件来获取cookie然后使用Java的httpclient来发送请求获取数据。

 

引入maven库:

<!-- https://mvnrepository.com/artifact/htmlunit/htmlunit -->

<dependency>

<groupId>net.sourceforge.htmlunit</groupId>

<artifactId>htmlunit</artifactId>

<version>2.15</version>

</dependency>

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.5.4</version>

</dependency>

<dependency>

<groupId>org.seleniumhq.selenium</groupId>

<artifactId>selenium-java</artifactId>

<version>2.53.0</version>

</dependency>

<dependency>

<groupId>com.codeborne</groupId>

<artifactId>phantomjsdriver</artifactId>

<version>1.2.1</version>

<exclusions>

<exclusion>

<groupId>org.seleniumhq.selenium</groupId>

<artifactId>selenium-remote-driver</artifactId>

</exclusion>

<exclusion>

<groupId>org.seleniumhq.selenium</groupId>

<artifactId>selenium-java</artifactId>

</exclusion>

</exclusions>

</dependency>

编写页面处理的工具类

/***

 * 页面操作的工具类

 *

 * @author admin

 *

 */

public class PageUtils {

public static PhantomJSDriver driver = null;

public static String PhantomPath = "E:/phantomjs/bin/phantomjs.exe";

//页面中的cookie

public static Set<Cookie>cookies=null;

//页面中的token

public static String token=null;

// 初始化phantom先关的操作

static {

// 设置必要参数

DesiredCapabilities dcaps = new DesiredCapabilities();

// ssl证书支持

dcaps.setCapability("acceptSslCerts", true);

// 截屏支持

dcaps.setCapability("takesScreenshot", true);

// css搜索支持

dcaps.setCapability("cssSelectorsEnabled", true);

// js支持

dcaps.setJavascriptEnabled(true);

// 驱动支持

dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, PhantomPath);

// 创建无界面浏览器对象

driver = new PhantomJSDriver(dcaps);

}

 

public static boolean loadLogin(String loginUrl, String mainUrl) throws Exception {

try {

driver.get(loginUrl);

File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

File file = new File("baidu_selenium.png");

FileUtils.copyFile(scrFile, file);

System.out.println("二维码已经保存为:" + file.getAbsolutePath());

System.out.println("请打开淘宝扫描该图片登录");

String current = "";

while (!current.equals(mainUrl)) {

current = driver.getCurrentUrl();

Thread.sleep(2000);

}

System.out.println("登录成功");

return true;

} catch (Exception e) {

//当出现异常时关闭

//driver.close();

//driver.quit();

return false;

}

}

//开启一个线程,定时访问页面,防止页面太久没有操作导致session超时

public static void keepCookies() {

new Thread() {

public void run() {

//淘宝联盟页面

String url="http://pub.alimama.com/myunion.htm";

while(true) {

try {

driver.get(url);

cookies=driver.manage().getCookies();

Thread.sleep(8*1000);

} catch (InterruptedException e) {

}

}

};

}.start();

}

//获取token

public static String getToken() {

//等待cookie中有数据

while(cookies==null) {

try {

Thread.sleep(1*1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for(Cookie cook:cookies) {

String name=cook.getName();

if(name!=null&&name.equals("_tb_token_")) {

return token= cook.getValue();

}

}

return token;

}

/**

 * 封装get请求

 * @param url

 * @return

 */

public static String httpGet(String url) {

try {

//获取cookie字符串

String cookieStr="";

for(Cookie cookie:cookies) {

cookieStr+=cookie.getName()+"="+cookie.getValue()+";";

}

// 根据地址获取请求

            HttpGet request = new HttpGet(url);//这里发送get请求

            //添加请求头

            request.addHeader("Pragma", "no-cache");

            //设置浏览器类型

            request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1");

            request.addHeader("Accept-Language", "zh-CN,en,*");

            //设置cookie

            request.addHeader("Cookie", cookieStr);

            // 获取当前客户端对象

            HttpClient  httpClient = HttpClients.custom().build();

            // 通过请求对象获取响应对象

            HttpResponse response = httpClient.execute(request);

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

                return EntityUtils.toString(response.getEntity(),"utf-8");

            }

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

 * 封装post请求

 * @param url

 * @return

 */

public static String httpPost(String url) {

 

try {

//获取cookie字符串

String cookieStr="";

for(Cookie cookie:cookies) {

cookieStr+=cookie.getName()+"="+cookie.getValue()+";";

}

// 根据地址获取请求

            HttpPost request = new HttpPost(url);//这里发送get请求

            //添加请求头

            request.addHeader("Pragma", "no-cache");

            //设置浏览器类型

            request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1");

            request.addHeader("Accept-Language", "zh-CN,en,*");

            //设置cookie

            request.addHeader("Cookie", cookieStr);

            // 获取当前客户端对象

            HttpClient  httpClient = HttpClients.custom().build();

            // 通过请求对象获取响应对象

            HttpResponse response = httpClient.execute(request);

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

                return EntityUtils.toString(response.getEntity(),"utf-8");

            }

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

 * 获取导购推广位

 * @param time

 * @param pvid

 * @param token

 * @return

 */

public static String getShoppingGuide(String pvid,String token) {

String url="https://pub.alimama.com/common/adzone/adzoneManage.json?"

+ "spm=a219t.7900221/1.1998910419.dbb742793.5bcb8cdcYsmdCb&"

+ "tab=3&"

+ "toPage=1&"

+ "perPageSize=40&"

+ "gcid=8&"

+ "t="+getCirrentTime()+"&"

+ "pvid="+pvid+"&"

//"pvid=60_59.172.110.203_862_1517744052508&"

+ "_tb_token_="+token+"&"

+ "_input_charset=utf-8";

return httpGet(url);

}

//获取当前的时间戳

public static long getCirrentTime() {

return System.currentTimeMillis();

}

/**

 * 获取1000以内的随机数

 * @return

 */

public static int getRandom() {

Random random=new Random();

int result=(int)(random.nextFloat()*1000);

return result;

}

}

 

编写主类:

public class Test {

public static Gson gson=new Gson();

public static void main(String[] args) {

//阿里妈妈录页面

String taobao="https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&css_style=alimama_index&from=alimama&redirectURL=http://www.alimama.com&full_redirect=true&disableQuickLogin=true";

//阿里妈妈主页面

String loginUrl="https://www.alimama.com/index.htm";

//获取个人信息的接口

String userUrl="http://pub.alimama.com/common/getUnionPubContextInfo.json";

try {

PageUtils.loadLogin(taobao, loginUrl);

PageUtils.keepCookies();

String token=PageUtils.getToken();

System.out.println("token:"+token);

String result=PageUtils.httpGet(userUrl);

LoginInfo info=gson.fromJson(result, LoginInfo.class);

System.out.println("获取个人信息:"+info);

//格式60_59.172.110.203_862_1517744052508

String pvid="60"

+"_"+info.getData().getIp()

+"_"+PageUtils.getRandom()

+"_"+PageUtils.getCirrentTime();

//获取导购推广位

String shopping=PageUtils.getShoppingGuide(pvid,PageUtils.getToken());

System.out.println("导购位信息:"+shopping);

} catch (Exception e) {

e.printStackTrace();

}

}

效果展示:


总结:通过本次爬虫也对http中cookie有了一定的了解,同时一些细节没有直接展示出来,但是代码中会有对一些躺过的坑作出解释,希望能够帮助到大家。

阿里妈妈按关键字或网址搜索商品 API(alimama.item_search)怎么抓取数据 函数中的签名计算逻辑,并根据阿里妈妈API文档调整请求的URL、参数和字段。此外,还需要处理可能出现的错误和异常情况。请注意,上述代码仅是一个示例框架,您需要填写。下面是一个使用Python和。 阅读详情

相关推荐

爬虫基础篇之selenium登陆获取阿里腾讯cookie

简介 selenium本身是自动化测试框架,只是在爬虫领域更能够显示出其一把梭的威力,所有网站比如淘宝,微博等必须登录状态才能访问页面,对数据进行抓取时,逆向分析js将是一条不归路,而自动化测试框架selenium完全模拟人的行为模式,对网站按钮的点击,元素的获取,内容文本的输入有着得天独厚的优势。不过相对于逆向加密参数执行的爬虫程序来说,selenium还是太过效率低下了,常规套路一般是通过selenium拿到cookie或者token后,再通过爬虫程序去抓取页面,事半功倍。 Alimama实战 以阿里妈

onejane 1834

爬虫爬取 淘宝联盟,淘宝客阿里妈妈 订单,细节

第一步:模拟登陆 取cookies 里面拿到 _tb_token_ 第二步 调接口 get请求 https://pub.alimama.com/openapi/param2/1/gateway.unionpub/report.getTbkOrderDetails.json?t=1605509524815&_tb_token_=e385eee1b3ba5&jumpType=1&positionIndex=1605329601_2xEY4T2%7C160550406...

2069

python 实现阿里妈妈订单自动下载

Python实现阿里妈妈自动登录下载同步订单功能,有需要的可以下载参考。

淘客、阿里妈妈、淘宝联盟接口

1:获取商品详情H5页面接口   https://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%7B"itemNumId"%3A"10031645140"%7D&amp;qq-pf-to=pcqq.group   2:获取阿里妈妈后台订单详情的接口   https://pub.alimama.com/repo...

骑着蚂蚁追大象的博客 3万+

spyglass之功耗分析

用于功耗分析的软件除了ptpx外,spyglass也可以。ptpx的功耗分析是基于netlist(网表)进行的,一般用于分析综合后的pre功耗和P&R后的post功耗,但这已经是项目进行到比较后期了,如果后期发现功耗数据与我们目标功耗相差较大,则意味着需要功耗优化,这时有可能会将项目计划节点延迟。如果在前期designer可以获得设计模块的功耗数据,可提早优化功耗,spyglass则为designer提供了一个很好的手段去评估功耗,从而提前优化功耗。

u011974971的博客 9199

海康视觉脚本开发全流程解析

本文详细解析了海康机器视觉平台(VM)中脚本模块的开发全流程。从创建第一个脚本模块入手,深入讲解了输入参数、输出参数与内部变量的定义与区别,并提供了C#脚本编写、公用函数调用、代码结构组织以及编译调试的实用指南。旨在帮助开发者掌握海康视觉脚本开发的核心技巧,高效实现复杂的自定义视觉逻辑处理。

beer8的博客 602

SpringBoot 简易实现热搜邮件推送,妈妈再也不用担心我不了解国家大事了

1、前言 上班的时候,无聊的时候,偶尔跑去百度看下热搜,所以就萌生出这种想法,通过邮件推送的方式实现效果,首先找到百度热搜的页面 热搜,话不多说,直接开干。 2、环境准备 因为是个SpringBoot工程,所以怎么搭建就不详细地讲解了,不懂的同学麻烦自行百度,直接跳到依赖文件,需要的依赖分别是 pom.xml <dependencies> <dependency> ...

潇歌的博客 197

告别仿真报错!手把手教你为Intel MAX10 FPGA定制IBIS模型(附Allegro Skill工具)

本文详细介绍了为Intel MAX10 FPGA定制IBIS模型的完整流程,解决信号完整性仿真中的管脚映射问题。通过Allegro Skill工具自动化处理管脚信息,优化IBIS模型关键段落,提升仿真效率和精度,适用于高速数字电路设计。

weixin_33217202的博客 322

技术分享 | App测试时常用的adb命令你都掌握了哪些呢?

测试策略是指在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的纲要,并阐述了它们之间如何配合,以高效地减少缺陷、提升质量。/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型一维数组 * @p。面试手撕了三道算法,这部分之后更,喜欢。后端golang开发,三段实习经历,其中两段小厂实习经历,一段中厂实习经历,求各公司开发、测开捞捞,为什么没有面试,个人实力还行,也很努力。校园大使内推码ucgmky!

han_xue_feng的博客 933

AI Agent评估:指标、策略与最佳实践

AI智能体正逐渐融入到各个领域,从日常的对话助手到复杂的工作流程自动化,其应用范围不断拓展。然而,确保这些智能体能够可靠、高效地完成任务至关重要,这就使得AI智能体评估成为了人工智能发展过程中不可或缺的一环。本文将深入探讨AI智能体评估的指标、策略以及最佳实践,为读者全面解读这一关键领域。

llm_way的博客 3498

基于MediaPipe的智能俯卧撑计数与姿势矫正系统

在现代健身和体能训练中,俯卧撑是最基础也是最有效的自重训练动作之一。然而,许多人在进行俯卧撑训练时常常存在姿势不正确、计数不准确等问题。本文将介绍如何利用计算机视觉和姿态估计技术,开发一个智能的俯卧撑计数与姿势矫正系统。

qq_36224726的博客 916

作业:GOOGLE优化网页代码

当我们完成一个网站时,我们还需对它进行优化,方法有很多,而我只说一下——我自己的一些想法:1、关键字首先确定你的核心关键字,再围绕核心关键字进行排列组合产生关键词组或短句。最好的关键词是那些没有被广泛滥用而又很多人搜索的词。如:商务→电子商务→07电子商务。如果你不知道这些到底是不是关键字?可以通过Google AdWords关键字工具:查询特定关键词的常见查询及扩展匹配。Google A

我与电脑 912

【RK3399】Android平台增加一款声卡设备(ES7210+ES8156),进行录音/播放测试。

文章目录前言一、开发环境二、概述三、硬件介绍1、ES72102、ES81563、数字麦克风阵列4、音频示意图四、下载SDK五、编译、烧写1、u-boot2、kernel3、Android SDK4、烧写分区5、烧写固件六、声卡驱动1、添加codec代码2、修改Kconfig3、修改Makefile4、修改rockchip_defconfig5、修改DTS七、声卡调试1、查看声卡注册信息2、使用tinycap/tinyplay录音和放音3、使用示波器观测八、修改HAL层1、修改默认capture/playba

rentong123的博客 2万+

大数据值得花金钱、耗时间去学习吗?(内附大数据学习使用说明书)

大数据人才荒!缺口1400万在数据驱动的未来,大数据人才市场势必会越来越大,而现在仅仅是大数据起步的进阶阶段,现在入行正是恰逢其时。中国互联网行业正处于一个新的飞速发展时期,对人才的需求也在同步急剧增长。2017年,发展大数据产业被写入政府工作报告中大数据开始不只是出现在企业的战略中,也开始出现在政府的规划之内,可以说是互联网时代的宠儿。根据中国商业联合会数据分析专业委员会统计,未来中国基础性数据

数据分析 707

s8654

The official Snapdragon Ride SX 4.0 development board provides standardized hardware support for the secondary development and functional verification of the s8654 platform.

qq_39257814的博客 6829

用Python爬取大连商品交易所期货实时行情:从入门到实战

python复制编辑# utils.py"豆粕": "M0","铁矿石": "I0","聚乙烯": "L0","玉米": "C0","聚丙烯": "PP0","棕榈油": "P0"本项目展示了:✅ 如何从新浪财经 API获取主力合约实时数据✅ 使用Python异步爬虫技术) 提升效率✅ 利用pandas和matplotlib进行结构化分析与可视化✅ 具备良好的扩展性,可对接金融、农业、能源等数据需求场景✅ 可作为期货量化策略数据源✅ 可嵌入自动化报告系统。

2201_76125261的博客 1247

如何选择适合自己的电商数据采集API接口?

选择电商数据采集 API 的核心逻辑是:“需求匹配优先,数据质量与合规性为底线,成本与服务为辅助”。先明确 “要什么数据、用在哪、量级多少”,再对比 API 的数据源、合规性、技术适配性,最后通过小范围测试验证,即可找到最适合自己的接口。

电商数据Girl的博客 1542

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【电商API】如何选择适合自己的电商数据采集API接口?

监控采集成功率,若连续 3 次失败率超过 20%,触发告警并自动切换备用采集方案(如从 API 切换至爬虫,或更新爬虫解析规则); 定期(每月)分析京东页面源码变化,提前更新爬虫规则(如通过 GitHub 开源项目 “jd_spider” 获取社区更新)。

API15579030501的博客 1962

OV9734 DATASHEET,完整规格书

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

2024年物联网嵌入式最新JSON和API接口初识_json格式在api项目中的使用(1),2024年最新2024大厂物联网嵌入式开发社招面试题

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用开发与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。————来自百度百科简而言之,就是各大厂商或个人将其封装好的函数/功能的接口提供给我们,我们通过直接调用其接口就可以完成相应的功能,而不用了解其中的内部逻辑。那么API接口和JSON又有什么关系呢。

2401_85011960的博客 476

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 系统接口及调用情况
下一篇: 阿里Dubbo学习与总结
telrob
博客等级 码龄9年 20粉丝 15原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值