准备

配置maven环境
下载浏览器驱动,并引入;

下载浏览器驱动

前往华为云镜像站下载谷歌浏览器驱动

https://mirrors.huaweicloud.com/home


要下载与自己电脑上谷歌浏览器版本相匹配的;

引入pom.xml依赖

        <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-api</artifactId><version>3.141.59</version></dependency>

开始爬取

目标网址

https://search.jd.com/Search?keyword=iphone%2013&psort=3&wq=iphone%2013&psort=3&pvid=37f665a84459460eb713df08bdcd7799&page=1&s=1&click=0


目标是爬取所有47页的商品的 价格,商品名称,商品描述;

第一页网址:

https://search.jd.com/Search?keyword=iphone%2013&psort=3&wq=iphone%2013&psort=3&pvid=37f665a84459460eb713df08bdcd7799&page=1&s=1&click=0

第二页网址:

https://search.jd.com/Search?keyword=iphone%2013&psort=3&wq=iphone%2013&psort=3&pvid=37f665a84459460eb713df08bdcd7799&page=3&s=61&click=0

第三页网址:

https://search.jd.com/Search?keyword=iphone%2013&psort=3&wq=iphone%2013&psort=3&pvid=37f665a84459460eb713df08bdcd7799&page=5&s=121&click=0

经过分析发现规律: page=1 , 3 , 5 为奇数 --2i+1
s =1,60,121 依次加60-- ((i-1)*60)+1

主要代码与操作步骤

定义一个浏览器对象

ChromeDriver webDriver = new ChromeDriver();

利用循环爬取45页的数据

for(int i=1;i<45;i++) {webDriver.get("https://search.jd.com/search?keyword=iphone%2013&wq=iphone%2013&cid3=655&psort=3&page="+((2*i)-1)+"&s="+((i-1)*60)+1+"&click=0");

将页面滑到最底部,因为京东页面若不滑到最下面会导致有些数据加载不出来

((JavascriptExecutor)webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight)");

获取源码

 String pageSource = webDriver.getPageSource();

选中一个单元获取其路径

#J_goodsList > ul > li:nth-child(13) > div
#J_goodsList > ul > li:nth-child > div

查看价格路径

#J_goodsList > ul > li:nth-child(16) > div > div.p-price > strong > i

在其循环体下

 div.p-price > strong > i

同理:店铺名称路径 div.p-shop > span > a
商品描述路径:div.p-name.p-name-type-2 > a > em

还要创建一个product类并建对象:

package com.zygxy.shop;public class Product {private String price;private String shopname;private String shopcontext;public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public String getShopname() {return shopname;}public void setShopname(String shopname) {this.shopname = shopname;}public String getShopcontext() {return shopcontext;}public void setShopcontext(String shopcontext) {this.shopcontext = shopcontext;}
}

全部代码

package com.zygxy.shop;import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.chrome.ChromeDriver;import java.io.IOException;
import java.util.Properties;
@Slf4j
public class JD {public static void main(String[] args) throws IOException {Properties properties = new Properties();properties.load(JD.class.getClassLoader().getResourceAsStream("application.properties"));System.out.println(properties.getProperty("chromedriver"));System.setProperty("webdriver.chrome.driver",properties.getProperty("chromedriver"));ChromeDriver webDriver = new ChromeDriver();for (int i=1;i<45;i++){webDriver.get("https://search.jd.com/search?keyword=iphone%2013&psort=3&wq=iphone%2013&psort=3&pvid=aa23e9f58a714e9087f316ab6aa993bd&cid3=655&cid2=653&page="+((2*i)-1)+"&s="+((i-1)*60)+1+"&click=0");((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight)");String pageSource = webDriver.getPageSource();Document parse = Jsoup.parse(pageSource);Elements select = parse.select("#J_goodsList > ul > li > div ");for(Element e : select){Product product = new Product();Element price = e.selectFirst(" div.p-price > strong > i");product .setPrice(price.text());Element shop_name = e.selectFirst(" div.p-shop > span > a");product.setShopname(shop_name.text());Element shopcontext  = e.selectFirst(" div.p-name.p-name-type-2 > a > em");product.setShopcontext(shopcontext.text());String json = JSONObject.toJSONString(product);log.info(json);}}}
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>NovelParse</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-api</artifactId><version>3.141.59</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency><!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency><!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version><scope>compile</scope></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope></dependency></dependencies><build><plugins><!-- 如果已经在Maven的全局配置中,配置了JDK编译的界别,这个插件可以省略 --><!-- <plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin> --><!-- 在mvn:package阶段使用maven-assembly-plugin可以将当前项目依赖的Jar中的字节码也打包!默认的打包插件maven-jar-plugin,只会将自己写的代码打包,默认仓库中已经安装了所需的依赖!--><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>com.zygxy.JD</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
</project>

resources配置

application.properties
本地驱动地址
chromedriver =E:\shixun\pachong\src\main\resources\chromedriver.exe

logback.xml 定义了日志的输出地址和格式

<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="LOG_HOME" value="d://shoplog" /><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%msg%n</pattern></encoder></appender><appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/shop.%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy><encoder><pattern>%msg%n</pattern></encoder></appender><!-- 日志输出级别 --><root level="INFO"><appender-ref ref="rollingFile"/><appender-ref ref="console" /></root></configuration>

Java爬虫技术(二)爬取京东iPhone商品信息并生成Json日志相关推荐

  1. python爬虫——用selenium爬取淘宝商品信息

    python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...

  2. Scrapy练习——爬取京东商城商品信息

    刚刚接触爬虫,花了一段时间研究了一下如何使用scrapy,写了一个比较简单的小程序,主要用于爬取京东商城有关进口牛奶页面的商品信息,包括商品的名称,价格,店铺名称,链接,以及评价的一些信息等.简单记录 ...

  3. python爬取京东手机参数_python爬虫——分页爬取京东商城商品信息(手机为例)...

    1.最近刚开始学习python   写了个爬虫练习,感觉主要是得会用F12查询网站结构代码.还涉及到反爬虫,每个网站都不一样,拿到的解析出的json数据格式也不同.得有些Web知识的基础才行. htt ...

  4. 爬取京东图书商品信息

    关键之处在于页面上的评论数的信息是动态加载的,是通过那个标签唯一的id号进行url拼接获得一个json文件然后显示的评论数. 抓包寻找了许久之后发现了一个奇特的文件. 然后再源代码里面搜索发现这个是商 ...

  5. python如何用xpath爬取指定内容_Python利用Xpath选择器爬取京东网商品信息

    HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树:XPath 使用路径表达式在 XML 文档中选取节点.节点是通过沿着路径或者 step ...

  6. python爬取京东商品信息代码_Python利用Xpath选择器爬取京东网商品信息

    HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树:XPath 使用路径表达式在 XML 文档中选取节点.节点是通过沿着路径或者 step ...

  7. 爬虫简单实例-爬取拼多多商品信息

    接口 https://youhui.pinduoduo.com/goods/goods-detail?goodsId=商品信息ID 思路 通过遍历商品信息ID来获取商品的信息, 1 ~ 9999999 ...

  8. selenium自动化爬取京东电脑商品信息用于数据分析

    今天使用selenium给别人写的一个自动化爬虫程序 from selenium import webdriver from selenium.webdriver.common.by import B ...

  9. 爬虫利器Pyppeteer的介绍和使用 爬取京东商城书籍信息

    提起 selenium 想必大家都不陌生,作为一款知名的 Web 自动化测试框架,selenium 支持多款主流浏览器,提供了功能丰富的API 接口,经常被我们用作爬虫工具来使用.但是 seleniu ...

最新文章

  1. MATLAB问题解决方案- Matlab出现报错:​‘***‘不是内部或外部命令,也不是可运行的程序或批处理文件
  2. python中文词云生成_Python 词云生成
  3. [线段树] Jzoj P1214 项链工厂
  4. 将手机网站做成手机应用的JS框架
  5. oracle 启用闪回数据库,如何启用Oracle10g闪回数据库特性
  6. 架构设计:数据服务系统0到1落地实现方案
  7. mysql版本更新之后忘记登录密码_MySQL 密码遗忘和登陆报错问题
  8. nginx trac mysql svn_nginx+php+mysql+svn+http
  9. IT人员及程序员怎样学好英语(关于如何利用极其有限的时间和条件学好英文)...
  10. ECSHOP的订单状态在数据库中的表现(order_status, shipping_status, pay_status)
  11. 修正统计的 5 个方法
  12. ubuntu安装rtx
  13. Discuz安装短信宝短信插件教程
  14. VUE filters 使用
  15. android 检测软键盘,Android:检测软键盘打开
  16. Ubuntu 18.04 Wine下安装微信并成功解决疑难杂症
  17. 使用火车头采集器笔记
  18. docker修改服务器参数怎么办,Docker(32)- 如何修改 docker 容器的启动参数
  19. matlab坐标轴标注和特殊字体…
  20. socket.io前后端实践及转发、多服务问题

热门文章

  1. 2019-01-02
  2. 前端基础1:HTML常用标签
  3. vscode之添加新语言扩展——aspx-html
  4. python调用钉钉API发送消息
  5. Android Studio 使用Eclipse项目,仍保留项目结构,非导入转成gradle
  6. 怎么用MathType添加函数识别
  7. ViewModelBase ObservableObject
  8. kingshard--一个支持sharding的MySQL Proxy项目
  9. 删除桌面快捷方式小图标的bat命令
  10. python 十六进制转中文_Python中十六进制数组到十进制的转换