文库网
关注排行榜

当前无数据...

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

基于JSoup的HTML解析(以58同城为例)
 

{tilte}-hzf


 House.java

  1. <code class="language-java">package com.newer.spider;
  2. public class House {
  3. String room;
  4. String des;
  5. String money;
  6. String jjr;
  7. public House() {
  8. }
  9. public String getRoom() {
  10. return room;
  11. }
  12. public void setRoom(String room) {
  13. this.room = room;
  14. }
  15. public String getDes() {
  16. return des;
  17. }
  18. public void setDes(String des) {
  19. this.des = des;
  20. }
  21. public String getMoney() {
  22. return money;
  23. }
  24. public void setMoney(String money) {
  25. this.money = money;
  26. }
  27. public String getJjr() {
  28. return jjr;
  29. }
  30. public void setJjr(String jjr) {
  31. this.jjr = jjr;
  32. }
  33. @Override
  34. public String toString() {
  35. return String.format("%s,%s\n",des,jjr);
  36. }
  37. }
  38. </code>
复制代码

Spider.java

  1. <code class="language-java">package com.newer.spider;
  2. import java.io.IOException;
  3. import java.util.List;
  4. import org.jsoup.Jsoup;
  5. import org.jsoup.nodes.Document;
  6. import org.jsoup.nodes.Element;
  7. import org.jsoup.select.Elements;
  8. /**
  9. * 爬虫
  10. * @author Admin
  11. *
  12. */
  13. public class Spider {
  14. /**
  15. * 爬虫的爬取(解析)的目标页面
  16. */
  17. String url;
  18. /**
  19. * 存储抓取的信息
  20. */
  21. List<House> list;
  22. /**
  23. *创建爬虫
  24. * @param url 目标页面
  25. */
  26. public Spider(String url,List<House> list) {
  27. this.url=url;
  28. this.list=list;
  29. }
  30. /**
  31. * 抓取信息
  32. */
  33. public void run() {
  34. // 使用Jsoup获得目标页面
  35. // DOM定义的树形结构
  36. try {
  37. Document document=Jsoup.connect(url).get();
  38. // 访问文档中的特定节点
  39. // a <a>
  40. // .abc class="abc"
  41. // #main id="main"
  42. // 抽丝剥茧
  43. Elements es=document.select(".house-list .house-cell");
  44. System.out.println(es.size());
  45. for (Element e : es) {
  46. // System.out.println(e.text());
  47. String room=e.selectFirst(".room").text();
  48. String des=e.selectFirst(".des").text();
  49. String money= e.selectFirst(".money").text();
  50. String jjr=e.selectFirst(".jjr").text();
  51. // System.out.printf("%s.%s,%s,%s\n",room,money,jjr,des);
  52. House house=new House();
  53. house.setDes(des);
  54. house.setRoom(room);
  55. house.setMoney(money);
  56. house.setJjr(jjr);
  57. System.out.println(house.toString());
  58. list.add(house);
  59. }
  60. } catch (IOException e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. }
  65. </code>
复制代码

App.java

  1. <code class="language-html">package com.newer.spider;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class App {
  5. public static void main(String[] args) {
  6. List<House> list=new ArrayList<>();
  7. // 创建一个爬虫,指定了任务
  8. Spider spider=new Spider("https://cs.58.com/chuzu/?PGTID=0d200001-0019-e299-bb21-2ff05b0bc4e2&ClickID=1", list);
  9. // 让爬虫开始工作
  10. spider.run();
  11. }
  12. }
  13. </code>
复制代码

控制台输出:

{tilte}-hzf


基于线程池的并发编程(以招聘网为例)

{tilte}-hzf
 


Spider.java

  1. <code class="language-java">package com.newer.spider2;
  2. /**
  3. * 基于线程的爬虫
  4. * @author Admin
  5. *
  6. */
  7. public class Spider implements Runnable {
  8. String url;
  9. public Spider(String url) {
  10. this.url=url;
  11. }
  12. @Override
  13. public void run() {
  14. System.out.printf("%s处理:%s\n",Thread.currentThread().getName(),url);
  15. try {
  16. Thread.sleep(5000);
  17. } catch (InterruptedException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21. }
  22. }
  23. </code>
复制代码

App.java

  1. <code class="language-java">package com.newer.spider2;
  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;
  4. /**
  5. * 基于线程池的爬虫
  6. * @author Admin
  7. *
  8. */
  9. public class App {
  10. public static void main(String[] args) {
  11. // 创建一个线程池,数量不限,循环使用
  12. ExecutorService pool= Executors.newCachedThreadPool();
  13. // 固定大小的线程池
  14. pool=Executors.newFixedThreadPool(16);
  15. // 单一线程池
  16. // pool=Executors.newSingleThreadExecutor();
  17. // 16个线程去执行30个任务
  18. for(int i=0;i<100;i++) {
  19. String url=String.format("https://www/lagou.com/zhaopin/Java/%d/",i+1);
  20. pool.execute(new Spider(url));
  21. }
  22. }
  23. }
  24. </code>
复制代码

控制台输出:

{tilte}-hzf


以上就是 利用爬虫快速获取企业招聘信息,有问题的小伙伴,欢迎留言!!!


本站资源均由网上搜集或网友上传提供,内容仅供观摩学习交流之用,本站将不对任何资源负法律责任.如有侵犯您的版权,请及时联系我们(邮箱:892481490@qq.com,客服QQ:892481490),我们会尽快处理!QQ350550790是骗子,注意不要和他交易!!!
发帖求助前要善用【论坛搜索】功能, 那里可能会有你要找的答案,也能为你节约不少学习时间;
如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加(威望)和(贡献)而不会扣除自己的积分。
如发现灌水帖、病毒木马帖、广告帖、工具不能正常使用、网盘链接失效,请点击【举报】 核实有几率会给予额外的B币奖励哦!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    发布资源 快速回复 返回列表 客服中心 官方QQ群

    QQ|小黑屋|手机版|编程之家论坛 ( 桂ICP备18002029号 )

    Powered by 编程之家  © 20019-2021