代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C#
】
爬取网站数据
作者:
新妃
/ 发布于
2016/7/18
/
597
package com.zzger.model; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch; import com.zzger.module.queue.UrlQueue; import com.zzger.util.HttpUtils; import com.zzger.util.RegexUtils; public class WebSite { /** * 站点url */ private String url; /** * 需要爬行的url队列 */ private UrlQueue<String> urls = new UrlQueue<>(); /** * 已爬行过的页面url */ private List<String> exitUrls = Collections.synchronizedList(new ArrayList<>()); private static final int TOTAL_THREADS = 12; private final CountDownLatch mStartSignal = new CountDownLatch(1); private final CountDownLatch mDoneSignal = new CountDownLatch(TOTAL_THREADS); public WebSite(String url){ this.url = url; urls.offer(url);//把网站首页加入需要爬行的队列中 } public void guangDu(){ new Thread(new Runnable() { @Override public void run() { paxing(HttpUtils.httpGet(url)); } }).start(); } public void paxing(String html){ if(html.lastIndexOf("下一页</a></li></ul></div>")<0) return ; String strList = html.substring(html.indexOf("<li class=\"next-page\">"), html.lastIndexOf("下一页</a></li></ul></div>")); String url = RegexUtils.RegexString("<a href=\"(.+?)\"", strList); if(url.equals("Nothing")) return ; urls.put(url);//把url存储到队列中 paxing(HttpUtils.httpGet(url)); } public void dxcPx(){ Page<DuanZi> page = new Gxpage(urls.take()); List<Section<DuanZi>> list = page.ybhqSection().getSections(); for(Section<DuanZi> section : list){ new Thread(new Runnable() { @Override public void run() { mStartSignal.countDown();// 计数减一为0,工作线程真正启动具体操作 try { mStartSignal.await();// 阻塞,等待mStartSignal计数为0运行后面的代码 // 所有的工作线程都在等待同一个启动的命令 } catch (InterruptedException e) { e.printStackTrace(); } DuanZi duanzi = section.select().getModel(); System.out.println(duanzi.getTitle()); mDoneSignal.countDown();// 完成以后计数减一 } } ).start(); } try { mDoneSignal.await();// 等待所有工作线程结束 } catch (InterruptedException e) { e.printStackTrace(); } dxcPx();//线程任务执行完后,再次获取url队列进行任务 } public static void main(String[] args) { WebSite web = new WebSite("http://duanziwang.com"); web.guangDu(); for(int i = 0; i<10;i++){ new Thread(new Runnable() { @Override public void run() { web.dxcPx(); } }).start(); } } }
试试其它关键字
爬取网站数据
同语言下
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
新妃
贡献的其它代码
(
13
)
.
合并数据,并以逗号连接数据
.
将文件打成zip压缩包
.
发送Get/Post请求
.
aspx如何调用.cs参数的值
.
爬取网站数据
.
实现文本框文本域光标处插入图片文本的插件(并且光标
.
实现高度不固定的div元素模块在页面中水平垂直居中
.
textarea自动增高并隐藏滚动条
.
屏蔽网页中的错误提示信息
.
更换网页背景的jquery代码(写入cookie)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3