大纲:
一、Selenium爬取商品信息
1.初始化
2.点开你要爬取的网址并指定关键字搜索
3.设定睡眠时间(可根据网络速度实际调整)
4.查找商品列表并获取相关信息
package com.zking;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
/**
* 商品信息爬取
*/
public class Demo1 {
public static void main(String[] args) {
//设置驱动
System.setProperty("webdriver.chrome.driver","C:\\Users\\gss\\Downloads\\chromedriver.exe");
//创建驱动
WebDriver driver=new ChromeDriver();
//与将要爬取的网站建立连接(获取你要爬取的网址)
driver.get("https://www.xx.com");
//模拟JD首页的搜索
//设置查询条件
driver.findElement(By.id("key")).sendKeys("手机");
//获取点击按钮,模拟点击事件
driver.findElement(By.cssSelector("button.button")).click();
//设置等待时间
sleep(3);
//执行js,滚动条下拉到最底
((JavascriptExecutor) driver).executeScript("window.scrollTo(0,document.body.scrollHeight)");
//再设置等待时间
sleep(3);
//*[@id="J_goodsList"]/ul/li[1]/div
//获取数据
List<WebElement> elements = driver.findElements(By.xpath("//*[@id=\"J_goodsList\"]/ul/li/div"));
//循环遍历数据,提取结果信息
for (WebElement element : elements) {
sleep(1);
WebElement priceElem = element.findElement(By.className("p-price"));
WebElement nameElem = element.findElement(By.className("p-name"));
System.out.println("【"+priceElem.getText()+"】- "+nameElem.getText().trim());
}
//关闭浏览器&释放资源
driver.close();
driver.quit();
}
/**
* 模拟等待时间
* @param second
*/
public static void sleep(int second){
try {
Thread.sleep(second*1000L);
}catch (Exception e){
e.printStackTrace();
}
}
}
二、Selenium爬取图片
注:第1-3步与上述获取文本信息一致!!!
附录一:
//执行js,滚动条下拉到最底
((JavascriptExecutor)driver).executeScript("window.scrollTo(0,document.body.scrollHeight)");
package com.zking;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
* 爬取图片
*/
public class Demo2 {
//定义获取图片的下载地址集合
private static List<String> paths=new ArrayList<>();
//定义图片下载网址(选择你要下载图片的网址)
private static final String PATH="https://www.xx.com/";
//下载图片保存到指定的目录
private static final String DIR="E:\\photo\\img\\";
//获取图片
private static void getImg(){
//设置驱动
System.setProperty("webdriver.chrome.driver","C:\\Users\\gss\\Downloads\\chromedriver.exe");
//创建驱动
WebDriver driver=new ChromeDriver();
//与将要爬取的网站建立连接
driver.get(PATH);
//设置休眠时间
sleep(3);
//获取图片资源
List<WebElement> elements = driver.findElements(By.xpath("/html/body/div[2]/div/div[1]/div/div[2]/ul/li"));
//循环遍历获取图片下载路径
for (WebElement element : elements) {
//获取a标签
WebElement a = element.findElement(By.tagName("a"));
//获取到a标签中的data-original属性
paths.add(a.getAttribute("data-original"));
}
//关闭浏览器&释放资源
driver.close();
driver.quit();
}
public static void main(String[] args) {
getImg();
//循环paths
for(String str : paths){
System.out.println(str);
saveImg(str);
}
}
/**
* 保存方法
* @param path
*/
private static void saveImg(String path){
try {
sleep(1);//设置休眠时间
//定义图片名称
String img = System.currentTimeMillis()+".jpg";
//创建URL,保存图片
URL url = new URL(path);
//定义输入流
InputStream is = new DataInputStream(url.openStream());
//定义输出流
OutputStream out = new FileOutputStream(new File(DIR+img));
//定义每次读取的长度
int len=0;
//定义每次读取的大小
byte[] size=new byte[1024];
//循环读流写流
while ((len=is.read(size))!=-1){
out.write(size,0,len);
}
//关闭流
is.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 模拟等待时间
* @param second
*/
public static void sleep(int second){
try {
Thread.sleep(second*1000L);
}catch (Exception e){
e.printStackTrace();
}
}
}