最基本的网页爬虫(数据采集)

news/2024/7/19 9:10:00 标签: 爬虫, Jsoup

    经常看到一些交流网页爬虫的初学者来问有没有教程,什么是爬虫呢?(ps:不是爬虫类,记得最搞笑的是一个交流这个主题的群,有人进来发广告,广告的内容则是卖蜥蜴、变色龙之类的爬虫)。ok,言归正传,什么是网络爬虫呢?

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。(摘自百度百科,网络爬虫的词条)

    不管看不看得懂,反正我们已经知道网络爬虫就是一个程序,该程序的作用就是不断的去采集网页的源代码(如果不知道什么是源代码的,打开浏览器然后随便一个网页,然后右键源代码),所以在这里我觉得如果要去主动去写一个可以按照自己的需求任意采集自己要的数据的爬虫,有几个技能是不可避免的,HTML,http协议,代码能力,正则(虽然目前有很多现成的工具类似Jsoup,beautifulsoup等,正则其实才是最灵活高效的工具,所以建议一定要掌握)。

    由于本文的标题是最基本的网页爬虫,所以我也不讲太多深的东西,我们就从一个最简单,但是也基本具有采集功能的程序代码来解释这个。

   

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import org.jsoup.Jsoup;  
  2. import org.jsoup.nodes.Document;  
  3.   
  4. import java.io.IOException;  
  5. import java.util.Queue;  
  6. import java.util.concurrent.ConcurrentLinkedQueue;  
  7. import org.jsoup.nodes.Element;  
  8. import org.jsoup.select.Elements;  
  9. /** 
  10.  * Created with IntelliJ IDEA. 
  11.  * User: lsz 
  12.  * Date: 14-4-27 
  13.  * Time: 上午1:16 
  14.  *   最基本的网页爬虫 
  15.  */  
  16. public class BasicCrawl {  
  17.     static String startUrl = "http://www.baidu.com";  
  18.     static Queue<String> taskQueue = new ConcurrentLinkedQueue<String>();  
  19.   
  20.     public static void main(String[] args) throws IOException {  
  21.         init();  
  22.     }  
  23.   
  24.     /** 
  25.      * 初始化任务,需要把入口URL添加到任务队列中 
  26.      */  
  27.     private static void init() throws IOException {  
  28.         taskQueue.add(startUrl);  
  29.         startTasks();  
  30.     }  
  31.   
  32.     /** 
  33.      * 开始任务,任务不断的从任务队列中拿到接下来需要采集的URL 
  34.      * @throws IOException 
  35.      */  
  36.     private static void startTasks() throws IOException {  
  37.         String url = null;  
  38.         while((url = taskQueue.poll())!=null){  
  39.             String content = Jsoup.connect(url).get().html();  
  40.             System.out.println("DownLoaded url:"+url);  
  41.             parse(content);  
  42.             System.out.println("parsed url:"+url);  
  43.         }  
  44.     }  
  45.     private static void parse(String htmlContent){  
  46.             Document doc = Jsoup.parse(htmlContent);  
  47.             //得到需要继续采集的URL,一般是写规则,我为了简单就直接获得所有的URL  
  48.             Elements allATag = doc.select("a");  
  49.             for(Element ele:allATag){  
  50.                 taskQueue.add(ele.absUrl("href"));  
  51.             }  
  52.             //接下来是处理网页,我简单就是自己获得title输出  
  53.             String title = doc.title();  
  54.             System.out.println("The title is:"+title);  
  55.     }  
  56. }  


    代码就在上面了,具体的也不多讲了,主要就是要有几个基本元素,比如开始的URL,然后任务队列,还有想办法如何不断的往队列加东西,让这个爬虫不要停下来。网页爬虫的开发有深有浅,看不同的人怎么看待了,这里我用的是jsoup库 ,简单易用。



http://www.niftyadmin.cn/n/1375794.html

相关文章

leetcode 686. 重复叠加字符串匹配(Repeated String Match)

目录 题目描述&#xff1a;解法&#xff1a;题目描述&#xff1a; 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数&#xff0c;使得字符串B成为叠加后的字符串A的子串&#xff0c;如果不存在则返回 -1。 举个例子&#xff0c;A "abcd"&#xff0c;B "…

python的常量与变量

常量与变量、赋值即定义 常量 1、python常量&#xff1a;内存中用于保存固定值的单元、在程序中、常量的值不能发生改变的 2、python常量命名规范&#xff1a;通常是以大写字母开头进行区分-Chy常量 chy变量 3、python常量的赋值&#xff1a;数字 字符串 布尔值 空值 4、举例&a…

kibana查询语法

单项term查询例: 搜 Dahlen&#xff0c; Malone 字段field查询 field:value 例&#xff1a;city:Keyport&#xff0c; age:26 通配符 ? 匹配单个字符 例&#xff1a; H?bbs * 匹配0到多个字符 例&#xff1a; H* 注意&#xff1a; ? * 不能用作第一个字符&…

5计算机基础知识与操作系统

计算机的有关概念 1&#xff0e;计算机的概念 电子计算机&#xff08;computer&#xff09;是一种按程序控制自动而快速进行信息处理的电子设备&#xff0c;也称信息处理机&#xff0c;俗称电脑。2&#xff0e;计算机的发展 1946年&#xff0c;世界上公认的第一台电子计算机诞生…

影响elasticsearch性能因素总结

转载标明出处&#xff1a;http://blog.csdn.net/hu948162999/article/details/51381717 一&#xff1a;硬件方面 在预算充足的情况下。特别是一些高并发业务的搜索。硬件层面占用整个elasticsearch性能空间很大比例。1&#xff09;内存&#xff1a; 单实例的情况下&#xff0c;…

Java-Runoob:Java 异常处理

ylbtech-Java-Runoob&#xff1a;Java 异常处理1.返回顶部 1、Java 异常处理 异常是程序中的一些错误&#xff0c;但并不是所有的错误都是异常&#xff0c;并且错误有时候是可以避免的。 比如说&#xff0c;你的代码少了一个分号&#xff0c;那么运行出来结果是提示是错误 java…

互联网行业的名称缩写

PM项目经理( Project Manager )从职业角度&#xff0c;是指企业建立以项目经理责任制为核心&#xff0c;对项目实行质量、安全、进度、成本管理的责任保证体系和全面提高项目管理水平设立的重要管理岗位。项目经理是为项目的成功策划和执行负总责的人。项目经理是项目团队的领导…

ElasticSearch跨域查询(多词搜索)

怎么控制elasticsearch的搜索的文本匹配精度&#xff1f;&#xff1f; 普通的多字段查询&#xff0c;可以直接用boolean查询&#xff08;如果是boolean查询的话&#xff0c;那么有n个查询条件&#xff0c;最终scorescore*1/n&#xff09;&#xff0c;现在让我们看看一个另外常见…