爬虫
简单学习了下爬虫,感觉挺有意思的……
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
package day17.JD2;
/**
* @author zhang peng
* @email 332156209@qq.com
* @date 创建时间:2019年8月22日 下午6:12:15
* @version 1.0
* @description -
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
public class JD {
public void site() throws IOException, InterruptedException {
int sum = 0;
//获取所有的三级分类
List<String> catUrlList = JD.getCat3();
//遍历3级分类
for(String catUrl : catUrlList) {
//延时
Thread.sleep(10);
//返回当前分类的总页数
int maxNum = JD.getPageNum(catUrl);
//某个分类下所有分页链接
List<String> pageUrlList = JD.getPageUrlList(catUrl, maxNum);
//遍历当前分类下的所有分页链接
for(String pageUrl : pageUrlList) {
//当前分页商品链接
List<String> itemUrlList = JD.getItemUrlList(pageUrl);
for(String itemUrl : itemUrlList) {
System.out.println(itemUrl);
sum = sum +1;
//获取到当前商品链接,调用方法获取其标题、价格。。。
System.out.println(Jsoup.connect(itemUrl).get().select(".sku-name").get(0).text());
}
}
}
System.out.println(sum);
}
public void testCat3() throws IOException {
List<String> catList = JD.getCat3();
for(String url : catList) {
System.out.println(url);
}
System.out.println("处理标准三级分类:"+catList.size());
}
//返回所有三级分类。京东三级分类:1286,标准有:1190
public static List<String> getCat3() throws IOException{
//所有分类都在里面
String url = "http://www.jd.com/allSort.aspx";
//通过选择器把三级分类过滤出来,集合
Elements els = Jsoup.connect(url).get()
.select("div dl dd a");
//存放爬取所有三级分类链接
List<String> catList = new ArrayList<String>();
for(Element e : els) {
//获取到三级分类a标签的链接值
String catUrl = e.attr("href");
//排除异常链接
if(catUrl.startsWith("//list.jd.com/list.html?cat=")) {
catList.add("http:"+catUrl);
}
}
return catList;
}
public void pageNum() throws IOException {
String catUrl = "http://list.jd.com/list.html?cat=1713,3274&jth=i";
int num = JD.getPageNum(catUrl);
System.out.println(num);
}
//获取某个分类下总页数,参数就是分类链接
public static int getPageNum(String catUrl) throws IOException {
Integer num = Integer.parseInt(
Jsoup.connect(catUrl).get()
.select(".fp-text i").get(0).text()
);
return num;
}
//测试某个分类下的所有的分页链接
public void pageList() throws IOException {
String catUrl = "https://list.jd.com/list.html?cat=1713,3274";
Integer maxNum = JD.getPageNum(catUrl);
List<String> itemList = JD.getPageUrlList(catUrl, maxNum);
for(String item : itemList) {
System.out.println(item);
}
}
//https://list.jd.com/list.html?cat=1713,3274&page=1
//https://list.jd.com/list.html?cat=1713,3274&page=2
//拼接某个一个分类下的所有的分页链接
public static List<String> getPageUrlList(String catUrl, Integer maxNum){
List<String> pageUrlList = new ArrayList<String>();
//遍历所有页数
for(int i=1; i<=maxNum; i++) {
String pageUrl = catUrl + "&page=" + i;
pageUrlList.add(pageUrl);
}
return pageUrlList;
}
//某个列表页面上所有商品链接地址
public void itemList() throws IOException {
String pageUrl = "http://list.jd.com/list.html?cat=1713,3274&page=210";
List<String> itemUrlList = JD.getItemUrlList(pageUrl);
for(String itemUrl : itemUrlList) {
System.out.println(itemUrl);
}
}
//抓取某个列表页面中所有商品链接的地址,
public static List<String> getItemUrlList(String pageUrl) throws IOException{
Elements els = Jsoup.connect(pageUrl).get()
.select(".p-img a");
List<String> itemUrlList = new ArrayList<String>();
//所有a标签,过滤过的
for(Element e : els) {
//e是a标签,href属性值
String itemUrl = e.attr("href");
itemUrlList.add("http:"+itemUrl);
}
return itemUrlList;
}
}
程序运行一会就会停,因为京东也有反爬虫♥ ♠ ♣ ♥ ◊ ♦ ♠