1.需求及配置

需求:爬取京东手机搜索页面的信息,记录各手机的名称,价格,评论数等,形成一个可用于实际分析的数据表格。

使用Maven项目,log4j记录日志,日志仅导出到控制台。

Maven依赖如下(pom.xml)

1

2

3 org.apache.httpcomponents

4 httpclient

5 4.5.3

6

7

8

9

10 org.jsoup

11 jsoup

12 1.11.2

13

14

15

16

17 log4j

18 log4j

19 1.2.17

20

21

log4j配置(log4j.properties),将INFO及以上等级信息输出到控制台,不单独设置输出文档。

log4j.rootLogger=INFO, Console

#Console

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

2.需求分析与代码

2.1需求分析

第一步,建立客户端与服务端的连接,并通过URL获得网页上的HTML内容。

第二步,解析HTML内容,获取需要的元素。

第三步,将HTML内容输出到本地的文本文档中,可直接通过其他数据分析软件进行分析。

根据以上分析,建立4个类,GetHTML(用于获取网站HTML), ParseHTML(用于解析HTML), WriteTo(用于输出文档), Maincontrol(主控).下面分别对四个类进行说明。为使代码尽量简洁,所有的异常均从方法上直接抛出,不catch。

2.2代码

2.2.1GetHTML类

该类包含两个方法:getH(String url), urlControl(String baseurl, int page),分别用于获取网页HTML及控制URL。由于此次爬取的网页内容只是京东上某一类商品的搜索结果,所以不需要对页面上所有的URL进行遍历,只需要观察翻页时URL的变化,推出规律即可。只向外暴露urlControl方法,类中设置一个private的log属性:private static Logger log = Logger.getLogger(getHTML.class); 用于记录日志。

getH(String url),对单个URL的HTML内容进行获取。

urlControl(String baseurl, int page),设置循环,访问多个页面的数据。通过审查元素可以看到京东上搜索页page的变化实际是奇数顺序的变化。

再看一下点击后网址的变化,可以发现实际变化的是page属性的值。通过拼接的方式就可以很的容易的获得下一个网页的地址。

https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=3&s=47&click=0

https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=5&s=111&click=0

https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=7&s=162&click=0

整体代码:

1 importjava.io.IOException;2 importorg.apache.http.HttpEntity;3 importorg.apache.http.client.ClientProtocolException;4 importorg.apache.http.client.methods.CloseableHttpResponse;5 importorg.apache.http.client.methods.HttpGet;6 importorg.apache.http.impl.client.CloseableHttpClient;7 importorg.apache.http.impl.client.HttpClients;8 importorg.apache.http.util.EntityUtils;9 importorg.apache.log4j.Logger;10

11 public classgetHTML {12 //建立日志

13 private static Logger log = Logger.getLogger(getHTML.class);14 private static String getH(String url) throwsClientProtocolException, IOException {15 //控制台输出日志,这样每条访问的URL都可以在控制台上看到访问情况

16 log.info("正在解析" +url);17

18 /*

19 * 以下内容为HttpClient建立连接的一般用法20 * 使用HttpClient建立客户端21 * 使用get方法访问指定URL22 * 获得应答23 **/

24

25 CloseableHttpClient client =HttpClients.createDefault();26 HttpGet get = newHttpGet(url);27 CloseableHttpResponse response =client.execute(get);28

29 /*

30 * 以下内容为将HTML内容转化为String31 * 获得应答体32 * 将应答体转为String格式,此处使用了EntityUtils中的toString方法,编码格式设置为"utf-8"33 * 完成后关闭客户端与应答34 **/

35 HttpEntity entity =response.getEntity();36 String content;37 if (entity != null) {38 content = EntityUtils.toString(entity, "utf-8");39 client.close();40 response.close();41 returncontent;42 } else

43 return null;44 }45 public static void urlControl(String baseurl, int page) throwsClientProtocolException, IOException {46 //设置当前页count

47 int count = 1;48 //如果当前页小于想要爬取的页数则执行

49 while (count

51 String u = baseurl + (2 * count - 1) + "&click=0";52 //此处调用ParseHTML类中的方法对URL中的HTML页面进行处理,后面详细介绍该类

53 String content =ParseHTML.parse(getH(u)).toString();54 //此处调用WriteTo类中的方法对解析出来的内容写入到本地,后面详细介绍该类

55 WriteTo.writeto(content);56 count++;57 }58 }59 }

2.2.2ParseHTML类

该步骤需要通过审查元素对需要爬取内容的标签进行确定,再通过Jsoup中的CSS选择器进行获取。

1 importorg.jsoup.Jsoup;2 importorg.jsoup.nodes.Document;3 importorg.jsoup.nodes.Element;4 importorg.jsoup.select.Elements;5

6 public classParseHTML {7

8 public staticStringBuilder parse(String content)9 {10 //使用Jsoup中的parse方法对已经转换为String的HTML内容进行分析,返回值为Document类

11 Document doc =Jsoup.parse(content);12 //使用选择器select对需要找的元素进行抓取,例如第一个select中选择的是ul标签中class属性等于gl-warp clearfix的内容

13 Elements ele = doc.select("ul[class = gl-warp clearfix]").select("li[class=gl-item]");14 //设置一个容器,用于装各个属性

15 StringBuilder sb = newStringBuilder();16 //通过上一个选择器可以获得整个页面中所有符合要求的元素,也即各款手机,下面则需要对每款手机进行遍历,获取其属性

17 for(Element e : ele) {18 //此处对各个属性的获取参考了网上一篇爬取京东上内容的文章,应该有其他不同的写法

19 String id = e.attr("data-pid");20 String mingzi = e.select("div[class = p-name p-name-type-2]").select("a").select("em").text();21 String jiage = e.select("div[class=p-price]").select("strong").select("i").text();22 String pinglun = e.select("div[class=p-commit]").select("strong").select("a").text();23 //向容器中添加属性

24 sb.append(id+"\t");25 sb.append(mingzi+"\t");26 sb.append(jiage+"\t");27 sb.append(pinglun+"\t");28 sb.append("\r\n");29 }30 returnsb;31 }32 }

2.2.3WriteTo类

此类中的方法将解析完成的内容写入到一个本地文件中。只是简单的IO。

1 importjava.io.BufferedWriter;2 importjava.io.File;3 importjava.io.FileWriter;4 importjava.io.IOException;5

6 public classWriteTo {7 //设置文件存放的位置

8 private static File f = new File("C:\\jingdong.txt");9 public static void writeto(String content) throwsIOException {10 //使用续写的方式,以免覆盖前面写入的内容

11 BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));12 bw.append(content);13 bw.flush();14 bw.close();15 }16 }

2.2.4MainControl类

主控程序,写入基地址与想要获取的页面数。调用getHTML类中的urlControl方法对页面进行抓取。

1 importjava.io.IOException;2 importorg.apache.http.client.ClientProtocolException;3

4 public classMainControl {5 public static void main(String[] args) throwsClientProtocolException, IOException {6 //TODO Auto-generated method stub

7 String baseurl = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc="

8 + "utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=";9 int page = 5;//设置爬取页数10 getHTML.urlControl(baseurl, page);11 }12 }

3爬取结果

爬取20页。

3.1控制台输出

3.2文档输出

可以直接使用Excel打开,分隔符为制表符。列分别为商品编号,名称,价格与评论数。

4小结

此次爬取使用了HttpClient与Jsoup,可以看到对于简单的需求,这些工具还是非常高效的。实际上也可以把所有类写到一个类当中,写多个类的方式思路比较清晰。

java 手机网页_Java爬虫: 爬取京东上的手机搜索页面 HttpClient+Jsoup相关推荐

  1. java爬虫京东商品,Java爬虫实现爬取京东上的手机搜索页面 HttpCliient+Jsoup

    1.需求及配置 需求:爬取京东手机搜索页面的信息,记录各手机的名称,价格,评论数等,形成一个可用于实际分析的数据表格. 使用maven项目,log4j记录日志,日志仅导出到控制台. maven依赖如下 ...

  2. java 爬虫 获取京东_Java爬虫爬取京东

    需求分析 首先访问京东,搜索手机,分析页面,我们抓取以下商品数据: 商品图片.价格.标题.商品详情页 SPU和SKU 除了以上四个属性以外,我们发现上图中的苹果手机有四种产品,我们应该每一种都要抓取. ...

  3. 【用Java爬取网页图片——爬虫爬取数据】

    用Java爬取网页图片--爬虫爬取数据 1.在创建项目中导入jsoup 2.创建一个保存下载图片的路径 3.使用URL读取网页路径,jsoup读取网页内容 4.利用属性标签获取图片连接块 5.因为该路 ...

  4. Python动态爬虫爬取京东商品评论

    Python 动态爬虫爬取京东商品评论 1. 概述 京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法. 动态爬虫 ...

  5. python爬虫爬取京东商品评价_网络爬虫-爬取京东商品评价数据

    前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...

  6. 爬虫爬取京东商品详细数据 (品牌、售价、各类评论量(精确数量)、热评词及数量等)json解析部分数据

    文章目录 前言 一.数据保存格式设置及数据库准备(CentOS云mysql数据库) 1.分析数据需求(单一商品为例) 2.数据库保存格式 3.用到的数据库操作及指令 二.网页分析 1.分析网页源码,确 ...

  7. 网络爬虫-爬取京东商品评价数据

    前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...

  8. java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息

    [Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...

  9. python爬虫爬取京东、淘宝、苏宁上华为P20购买评论

    爬虫爬取京东.淘宝.苏宁上华为P20购买评论 1.使用软件 Anaconda3 2.代码截图 三个网站代码大同小异,因此只展示一个 3.结果(部分) 京东 淘宝 苏宁 4.分析 这三个网站上的评论数据 ...

最新文章

  1. 值得分享!它们才是真正的宝藏网站,让人惊艳
  2. RK 3299 Ubuntu 配置密钥
  3. 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录。
  4. java小编程----在排序数组中查找元素的第一个和最后一个位置
  5. bmp转换tiff c++代码_如何用Java语言将图像转换为PDF?Spire.PDF for Java轻松搞定
  6. 超详细,Wireshark 3.6.3安装教程(Windows系统)
  7. 浏览器渲染原理 记录备份
  8. 射频微波芯片设计4:耦合器芯片
  9. 别了北上广深 中国城市排名发生巨变!
  10. 2021年P气瓶充装新版试题及P气瓶充装证考试
  11. 基于压缩传感的脉冲GPR成像技术研究(硕士学位论文初稿20111230)
  12. Unity 3d 中Debug.Log和Print的区别。
  13. CloudFoundry 环境上的 Java 应用开发如何指定 build pack
  14. KNN算法原理与自实现电影分类
  15. 【机器学习】(十七)非负矩阵分解NMF:人脸图像特征提取、用特征排序;还原混合信号
  16. 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
  17. mysql 什么是主键_mysql – 主键应该是什么?
  18. 【一起入门MachineLearning】中科院机器学习-期末题库-【计算题5+单选题19,20+简答题21】
  19. 323、异常访问统计 运维同学最近发现应用的访问日志有异常,需要分析下应用服务器是否被攻击了。
  20. LabVIEW TCP网口通讯倍福 BeckhoffPLC ADS 通讯协议

热门文章

  1. 天命과 運命과의 關係
  2. GNOME下设置应用程序图标
  3. 昆山万象汇机器人_9月童趣沙龙活动,现场有你的身影么?
  4. 淘宝、海外代购系统、代购小程序、APP的开发以及源码PHP前端源码
  5. QBXT 2018春季DP图论班 2018.4.29 --- 图论基础
  6. 【矩阵分解二】FunkSVD
  7. 傅里叶变换终极解释(精校版)
  8. 计算机专业在美国容易找工作,美国最好找工作的十大专业 你选对了吗?
  9. 沉睡者 - 现在的百度渠道还有网赚时机吗?
  10. Java入门必备知识