首页 > 编程语言 >java写个爬虫抓取汽车之家车型配置参数

java写个爬虫抓取汽车之家车型配置参数

时间:2023-12-14 11:04:02浏览次数:34  
标签:java 爬虫 new 抓取 线程 executor import

前几天有个搞工程的表弟找我,问我什么车好,可以经常跑工地的,看上去又有面子。于是我挥动发财的小手,写一个爬虫程序,筛选并整理了一些数据,并附上下载的图片提供参考,看中了果断第二天提车到手。

java写个爬虫抓取汽车之家车型配置参数_代理IP

我是使用Java编写的爬虫程序,用于抓取汽车之家网站上的车型、车系、配置参数数据。以下是每行代码和步骤的详细解释:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

public class CarZHomeCrawler extends Thread {
    private static final BlockingQueue<Document> queue = new LinkedBlockingQueue<>();

    public CarZHomeCrawler() {
        super();
    }

    @Override
    public void run() {
        try {
            while (true) {
                Document doc = queue.take();
                // 这里使用Jsoup类对网页进行解析,获取需要的数据
                doc.select("div.product").forEach(d -> {
                    // 代码略
                });
                doc.close();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 创建代理对象并设置代理信息
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("www.duoip.cn", 8000));
        // 创建一线程池,每个线程都连接一个代理,以防止被封IP
        // 提取ip池  jshk.com.cn/mb/reg.asp?kefu=xjy&51cto
        ExecutorService executor = Executors.newFixedThreadPool(10, r -> {
            Thread thread = new Thread(r);
            thread.setProxy(proxy);
            return thread;
        });

        try {
            for (String url : urls) {
                // 通过一线程池将任务分发到各个线程中,每个线程负责抓取一个网页
                executor.execute(new CarZHomeCrawler(url));
            }
            // 等待所有任务执行完毕
            executor.shutdown();
            while (!executor.isTerminated()) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭一线程池
            executor.shutdownNow();
        }
    }
}

该程序首先创建了一个BlockingQueue对象,用于存放爬取的网页。然后,创建了一个CarZHomeCrawler类,该类继承自Thread类,实现了run方法。在run方法中,程序进入一个无限循环,每次从队列中取出一个网页进行解析,获取需要的数据,然后将解析后的数据关闭。在main方法中,程序创建了一个Proxy对象,并设置代理信息,创建了一个线程池,每个线程都连接一个代理,以防止被封IP。然后,通过线程池将任务分发到各个线程中,每个线程负责抓取一个网页。最后,等待所有任务执行完毕,并关闭一线程池。这样,程序就可以实现自动抓取汽车之家网站上的车型、车系、配置参数数据的功能了。

以上就是我抓取汽车之家的一些车辆数据,尤其是买车的人可以直接输入自己想要的配置参数,然后查找多种车型提供自己选择,也许代码还有需要优化的地方,但是目前来说运行是没啥问题的。如有问题可以留言一起讨论。

标签:java,爬虫,new,抓取,线程,executor,import
From: https://blog.51cto.com/u_13488918/8815700

相关文章

  • Java 大文件分片上传
    原理:前端通过js读取文件,并将大文件按照指定大小拆分成多个分片,并且计算每个分片的MD5值。前端将每个分片分别上传到后端,后端在接收到文件之后验证当前分片的MD5值是否与上传的MD5一致,待所有分片上传完成之后后端将多个分片合并成一个大文件,并校验该文件的MD5值是否与上传时传入的M......
  • 【Python爬虫】Scrapy框架处理分页爬取+cookie登录_17k小说网
    简介本文主要讲常规分页爬取与利用Scrapy框架怎么快捷的爬取分页的数据以及cookie登录,案例网站时17k小说网,url是https://www.17k.com/常规分页爬取Scrapy框架分页爬取cookie登录分页常规分页爬取常规分页爬取,直接观察页面数据,一共有多少页数据,就for循环多少次classXiao......
  • 基于JavaWeb的电影推荐平台的设计与实现
     1.项目演示前端演示地址:http://96.8.117.232:8082/后端演示地址:http://96.8.117.232:8083/ (管理员账号:admin密码123456)访问慢是因为服务器是海外的,国内访问慢,便宜VPS凑合了2.项目介绍技术列表技术说明SpringBootWeb应用开发框架Vue3.xjava1.8my......
  • Java-研究HashMap的源码
    Java-研究HashMap的源码JDK版本:17类注释基于哈希表的Map接口实现。此实现提供了所有可选的映射操作,并允许null值和null键。(HashMap类大致相当于Hashtable,只不过它是不同步的并且允许null。)该类不保证映射的顺序;特别是,它不保证顺序随着时间的推移保持不变。此实现为基本操......
  • Java之Hashset的原理及解析
     4.数据结构4.1二叉树【理解】二叉树的特点二叉树中,任意一个节点的度要小于等于2节点:在树结构中,每一个元素称之为节点度:每一个节点的子节点数量称之为度二叉树结构图编辑4.2二叉查找树【理解】二叉查找树的特点二叉查找树,又称二叉排序树或者二叉搜索树每一个节点上最多有两......
  • springboot004旅游路线规划系统(Java毕业设计,附数据库和源码)
    第一章绪论1.1选题背景与研究意义随着社会的不断进步,在居民生活水平提高的同时,人们当前在生活的方方面面也越来越注重服务所带来的体验,随着近几年国家政策大力发展旅游业,旅游景点的建设越来也完善,旅游业的发展速度得到了显著的提升。各大旅行社、旅游景点都不断的推出新的活动计......
  • Java从入门到放弃(知识体系图谱)
    一、Java学习路线话不多说,先来一张劝退图!!!二、Java并发学习路线下面是一张关于Java并发编程的思维导图,大的方向可以分为三个部分:线程基础、理论基础、工具类JUC三、Java虚拟机一张关于JVM的思维导图,大的方向可以分为三个部分:字节码与类的加载、内存与垃圾回收、性能监......
  • 关于java的多态方法调用顺序的问题
    使用父类类型的引用指向子类的对象,该引用调用的师父类中定义的方法和变量,变量不能被重写(覆盖);如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;注意特殊情况,如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强......
  • fusion accessR6本地挂载光驱的Java环境问题
    fusion access版本:R6外部操作环境:windows7准备制作的模版:windows7 旗舰版64 办公软件:office2010tools:ultraiso,firefox33,360万能网卡驱动本地挂载光驱的Java环境问题:安装完模板虚拟机后网卡无法识别,需要安装网卡驱动,由于没有IP地址,只能使用光驱本地挂载。解决方案:......
  • 使用java调用Python脚本
    通过使用java中的ProcessBuilder类,可以实现在java代码中调用外部的python代码的功能,以下为具体代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassJavaCallPython{publicstaticvoidmain(String[]args)......