获取iframe嵌套页面的数据_爬虫学习十二之案例开发获取搜索页面数据

准备一个定时任务

准备一个运行类

fb9f646916bdf41b860402859245bddd.png

将之前封装的HttpClient拿过来,放到一个utils包中

a3046f0adf8ed1ed0a6d2be0e323efb6.png

编写定时类的定时方法

0a3abca8d3cdc61dcc8b510a3ad2cf1e.png

我们在京东中搜索手机,可以看到URL

aeb08bca9f849da074230f136fcc02f1.png

点击下一页,观察URL的变化

a42e0d43a322116085fb95fe679135c0.png

其中page这个参数,我们发现

Page=1是第一页

Page=3是第二页

Page=5是第三页

这就是页码的判断参数

我们开始编写代码

首先声明解析的初始地址

1c7cbc6bdabc5d0a242c72afe7dd9b63.png

写一个循环,循环页码(8示例数据,学习为主)

928ee8203e5a77818a46de82020a9011.png

在开发者工具中查看下页面结构,下面这些就是页面中的商品

e89c3468fd5176c74568240dcf2bb9a5.png

可以找到sku和spu

dd939864e201bf8a1041537321a440a3.png

那我们来抓取这些数据

先准备一个HttpClient

4996b22eff6c784ba6320897e60e3ae4.png

搜索页面(这个地方循环的初始值变为1,之前写错了)

1dfc823855bcbe34003347d624f120e2.png

解析页面

创建一个解析方法,这个方法完成页面解析

2ffd5ba72d5b2a3c47e03d5d91f67164.png

基本思路是:首先获取spu,然后根据spu获取sku

分析页面先获取这个div,id是goodsList,然后根据这个div找到子元素ul,然后找到li

6f13b69fc61910405d3982f8ca64d904.png

所以获取代码

ae3b53f764e48ff837a0fee11fe18303.png

获取spu

62aa8a1e927db481991f66e13c0102d6.png

获取sku

分析页面,找到ps-item

4e699aaa7e52bca740d88c901ac7cf0a.png

所以代码

c9b41d90c5936c58c8cc156924ec8654.png

其中sku的值

80e9aa8d7cb5a505f8631a3b5070f37f.png

所以代码

10cc7163fa71201ea48d45e02f069650.png

然后我们将数据保存到数据库中

先声明Service

e63d0ed57fa7a6f0c38c261192b9620a.png

根据sku查询商品数据,如果存在,后续数据就不用查询解析了

70970b8d37a7f3389d0fb4e470e0c2af.png

设置完商品spu,继续解析商品详情url

4c373bd0d2f035e37828cc1510814256.png

之前我们发现这个是由sku拼接成的

0084a1f0424869c3c4da7ea16d9a7b63.png

代码,完成拼接

f3df1dd08bce619503576de2796b0201.png

继续获取商品的图片,这个地方注意,在开发者工具和源代码中看到的不一样,所以代码要经常调试,开发者中是src而源码中是data-lazy-img,我们使用data-lazy-img

dbc3a0176172b314e4b0e466229256c2.png
3a336e4839f7f4c8ea1d90644603f2c7.png

代码

e581ef9b77e060d41cc6ed19c21c21a7.png

其中因为图片大小的问题,需要做一个替换

这个图片很小

3216ed0be29a668ee36cfc6a04c6e23e.png

改成1就可以了

a524cf6e69aa72de9c93361e87155ad8.png

所以代码替换下,最后保存图片

2003b540fd71dc4da9bfd094b7e8cdb8.png

获取商品的价格

因为价格选中不同的价格不同

5abfa7bcddc504efaf0795a407ae9f33.png
10ac9c499fa45ceb18e395248a36949c.png

我们调出开发者工具看一下,发现有新的请求

c833bd549d3ef72cd633887970e80f66.png

所以要重新请求,我们看一下

6fb2d776d8af9ca863d5704aad014424.png

访问下,可以得到数据

1057ac4c6a1bdc739a0ca686fd0f582c.png

简化下Url

114dde132822df5e47b63327580bfd08.png

代码实现,获取到Json数据

b91e8f3e963ad0b5818ffec74d6f6de2.png

解析Json

先声明一个对象

461fd6d505140e2a8afc9bea0a05563e.png

解析数据

4ce9077e414572cc99253113ddad0501.png

获取商品标题,先进入详情页获取标题

fc8e99bedc9428a98b2244ec84d6fe29.png

代码

319f322069376fe8bde2346831065259.png

这是获取完页面了,接下来分析里面的内容

af165aee3d41af7caddcc5cbde683c99.png

所以代码

604e2060d84b4ff07f942ac8e406a4f5.png

设置创建和更新时间

eff06883be4927a6cbdab1617bd06d12.png

终于可以保存了

54b7c229de26e8d3643f209688d75a44.png

之前忘了补充事务注解了

aaa7caa13c9444ca8f5bb042750145eb.png

调用方法

2ced1b1f5a604fc9dbba416749f14a0a.png

调试下程序,看是否有错误的地方

发现总是访问不到,显示页面信息

dd2c2eb182877d1c5290a6087f76ea25.png

所以设置请求头消息User-Agent模拟浏览器

httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");

7f5d170ac8006bc35b5c25ddd7526389.png

写错地方

72f047550b22cd9e04f2e4d7e7418b2c.png
bddf6424b2dd4ac9d0ad33cd95d9b44d.png
f9b5ac24c1870dbfb3bddc14048ef9b0.png

可以获取数据了

98e098bab5b61784641427bf511b0ecd.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值