爬虫

什么是网络爬虫 又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫可以根据指定的规则,从互联网上下载网页、图片、视频等内容,并抽取其中的有用信息进行处理。网络爬虫的工作流程包括获取网页源代码、解析网页内容、存储数据等步骤。根据其目的和工作方式的不同,网络爬虫可以分为多种类型。常见的网络爬虫包括通用爬虫、聚焦爬虫、增量式爬虫等。 阅读详情

欢迎访问我的网站
 

 

 

通过webmagic 将显摆网的数据爬到数据库中

package main.java.com.dbyl.tests.crawler;


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedHashSet;
import java.util.List;


import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.mysql.jdbc.Connection;


import main.java.com.dbyl.libarary.utils.DatabaseUtils;
import main.java.com.dbyl.libarary.utils.StringTools;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
/**
 * 显摆网爬虫
 * @author Mr Chen
 *
 */
public class xbCrawler implements PageProcessor {


private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
private static WebClient driver;
static String code;
static Connection conn;


@Override
public void process(Page page) {
System.out.println("==============================================================");
System.out.println("                              Start                           ");
System.out.println("==============================================================");

page.putField("name", page.getHtml().xpath("//div[@class='xiangqingrightbox1left-a']/text()").toString());
page.putField("adress", page.getHtml().xpath("//div[@class='xiangqingrightbox2-b']/text()").toString());
//page.putField("date", page.getHtml().xpath("//div[@class='xiangqingrightbox2-b']/text()").toString());
if (null == page.getResultItems().get("name")) {
// skip this page
page.setSkip(true);
}


if (null == page.getResultItems().get("adress")) {
// skip this page
page.setSkip(true);
}


String name = page.getResultItems().get("name");
String adress = page.getResultItems().get("adress");
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMdd");
try {
name = new String(name.getBytes(), "utf-8");
adress = new String(adress.getBytes(), "utf-8");
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
//String tempDate = page.getResultItems().get("date");
System.out.println("name: " + name + "===>" + adress+"\n");
//Date date = null;
/* try {
if (!StringTools.isNullOrEmpty(tempDate.trim())) {
date = new Date(sdf.parse(tempDate.trim()).getTime());
} else {
date = new Date(System.currentTimeMillis());
}
} catch (ParseException e1) {
e1.printStackTrace();
}*/
try {
System.out.println("==============================================================");
System.out.println("                    Insert To Database                        ");
System.out.println("==============================================================");
//insertToDatabase(conn,StringTools.chineseToUnicode(name.trim()), price, cdate);
insertToDatabase(conn,(name.trim()), (adress.trim()));
// writeToTXT(name.trim()+","+adress.trim()+","+tempDate.trim()+"\n");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


System.out.println("==============================================================");
System.out.println("                             The End                          ");
System.out.println("==============================================================");
}


@Override
public Site getSite() {
return site;
}


public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
conn = (new DatabaseUtils.Builder().setHost("localhost").setDbName("study").setUser("study")
.setPassword("123").builder()).getConection();
for (String code : getAllLinks()) {
String url = "http://www.xbjob.com/position/detail?id=" + code;
System.out.println("=====>" + url);

Spider.create(new xbCrawler()).addUrl(url).thread(1)
.addPipeline(new JsonFilePipeline("/Volumes/Transcend/Document/workspace/Demo/logs")).run();


}


}


/**获得id 并跳转到下一页
* @author young
* @return
* @throws IOException
*/
public static LinkedHashSet<String> getAllLinks() throws IOException {
driver = new WebClient(BrowserVersion.CHROME);
HtmlPage page = driver.getPage("http://www.xbjob.com/position");
LinkedHashSet<String> map = new LinkedHashSet<String>();
        int p=2;//title上面的数字
        //#selectPositionList > div.s_content > div.s_contentbox.active
DomElement button = page.getFirstByXPath("//div[@class='Pagination myself' and not(@disabled)]/a[@title="+p+"]");
List<?> target = page.getByXPath("//div[@class='s-contentleft1']/a");
        
for (Object link : target) {
code = getCode(link.toString());
map.add(code);
}
int i = 0;
while (null != page) {
i++;
System.out.println("============>" + i);
button = page.getFirstByXPath("//div[@class='Pagination myself' and not(@disabled)]/a[@title="+p+"]");
if (null == button) {
break;
} else {
if(i<2)//爬3页数据
{
page = button.click();
p++;
target = null;
target = page.getByXPath("//div[@class='s-contentleft1']/a");
for (Object link : target) {
code = getCode(link.toString());
map.add(code);
  }
}
else{
break;
}
}
}


System.out.println(map.size());
return map;


}


/**
* @author young
* @param source
* @return
*/
public static String getCode(String source) {
if (null != source) {
String temp = StringTools.getMatch(source, "(\\d+)");
System.out.println("id:"+temp);
return temp;
} else {
return null;
}


}


/**
* @author young
* @param conn
* @param name
* @param price
* @param cdate
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void insertToDatabase(Connection conn, String name, String adress)
throws ClassNotFoundException, SQLException {


//Date date = new Date(System.currentTimeMillis());
PreparedStatement ps = conn.prepareStatement("INSERT into xbjob(name,adress) values (?, ?)");


ps.setString(1, name);
ps.setString(2, adress);
//ps.setDate(3, date);
ps.executeUpdate();
System.out.println("INSERT into xbjob(name,adress) values " + name + adress);


}
public void writeToTXT(String message) throws IOException {
BufferedWriter bf = null;
try {
// set true ,avoid
bf = new BufferedWriter(new FileWriter("report1.csv", true));
bf.write(message);
bf.flush();


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
bf.close();
}




}






}

 

 

什么是网络爬虫?有什么用?怎么爬? 随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要。互联网中的数据是海量的,如何自动高效地获取互联网中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的。如果只是做搜索引擎,那么感兴趣的信息就是互联网中尽可能多的高质量网页;如果要获取某一垂直领域的数据或者有明确的检索需求,那么感兴趣的信息就是根据我们的检索和需求所定位的这些信息,此时,需要过滤掉一些无用信息。前者我们称为通用网络爬虫,后者我们称为聚焦网络爬虫。 阅读详情

相关推荐

网络爬虫之必备知识

摘要:本文主要理清网络爬虫的概念,简要讲解爬虫的必备知识,分为python基础、字符编码、http头信息、http状态码、html基础、爬虫职业道德。内容浅显,主要理一理相关知识。一、网络爬虫的概念   网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 通俗的说,我们写爬虫的目的就是自动从不同的网页上提取海量的数据。以下是我之前爬取的部分数据

CaiNiaoWuZui的专栏 5859

Springmvc核心技术个人笔记

Springmvc核心技术 一、Spring MVC工作原理及HelloWorld 1.加入jar包 2.在web.xml中配置DispatcherServlet <!-- The front controller of this Spring Web application, responsible for handling all application requests --> <!-- 如果没有通过<init-param>元素配置,则应用程序会默认去WEB-INF目

qq_43544111的博客 278

爬虫基础(1)什么是网络爬虫

文章目录一. 认识网络爬虫二. 网络爬虫的组成三. 网络爬虫的类型1. 通用网络爬虫2. 聚焦网络爬虫3. 增量式网络爬虫4. 深层网络爬虫(1)静态网页(2)深层页面和表层页面(3)网络爬虫表单填写四. 网络爬虫的用途 一. 认识网络爬虫 说起网络爬虫,人们常常会用这样一个比喻:如果把互联网比喻成一张网,那么网络爬虫就可以认为是一个在网上爬来爬去的小虫子,它通过网页的链接地址来寻找网页,通过特定的搜索算法来确定路线,通常从网站的某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地

Python达人 2840

Python爬虫:爬取需要登录的网站(文末有视频教程)

爬虫在采集网站的过程中,部分数据价值较高的网站,会限制访客的访问行为。这种时候建议通过登录的方式,获取目标网站的cookie,然后再使用cookie配合代理IP进行数据采集分析。使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。千锋教育Python全套视频教程800集(完整版)Python爬虫全套视频在线学习。

关注我!带你一路 "狂飙" 到底! 9085

欧拉 openEuler 20.03安装配置tigervnc-server

欧拉 openEuler 20.03安装配置tigervnc-server openEuler VNC

郭亚望 8952

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活,在加上陪伴自己的孩子没有时间更新文章了,这只能在晚上给大家写文档了,我最近在游戏公司上班,研究封包。我把这些东西都做成了笔记,我想有些东西是大家都想弄明白d ...

寒梅独自开 1万+

WebMagic-使用入门

原文出自:http://webmagic.io/docs/zh 访问经常出错,于是把文档转到自己博客里 1基本的爬虫 在WebMagic里,实现一个基本的爬虫只需要编写一个类,实现PageProcessor接口即可。这个类基本上包含了抓取一个网站,你需要写的所有代码。 同时这部分还会介绍如何使用WebMagic的抽取API,以及最常见的抓取结果保存的问题。 1.1 实现PagePr

一个有趣、有料、有内涵的地方! 3万+

最小路径和——动态规划求解(Java实现)

最小路径和——动态规划求解(Java实现) 题目: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 这题和机器人走路的思路类似,就是状态方程有所不同,...

weixin_43395911的博客 894

Python爬虫笔记(一)——基础知识简单整理

登陆时候的用户名和密码可以放在http的头部也可以放在http的body部分。   HTTPS是否可以抓取 由于https运用的加密策略是公开的,所以即使网站使用https加密仍然可以获得数据,但是类似于微信这样的app,它自己实现了一套加密算法,想要抓取数据就变得比较困难。   制作爬虫时需要注意的HTTP字段 HTTP请求头部分字段解释: accept:表明请求的资源类型 ac...

菜到怀疑人生的博客 1万+

CMake安装grpc生成gRPCTargets.cmake文件

以下是安装语句: cd grpc_folder git submodule update --init cmake .. make -j 4 sudo make install 然而编写依赖gRPC的程序,发现无法调用gRPC的CMake文件,错误提示如下所示: include could not find load file: /usr/local/lib/cmake/g...

2328

STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

本文介绍如何用STM32F107VC实现高精度的脉冲宽度计(测量周期脉冲的占空比)。 采用定时器的外部输入捕获功能,双输入+DMA方式,追求硬件的极限表现。

st01lsp的专栏 5287

网络爬虫【简介】

网络爬虫的简介和浏览器分析工具

2401_88885149的博客 1万+

YOLO11改进|注意力机制篇|引入先验卷积注意力机制CPCA

YOLO11中添加先验卷积注意力机制CAPA

A1983Z的博客 2374

网络爬虫是什么?怎么学python爬虫

网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。

Itmastergo的博客 3万+

Android 11多窗口+分屏+APP窗口嵌套TaskView实现原理一

然而随着版本的迭代升级,google对分屏的定制差异化也越来越大,Androd 11的分屏用的是split-screen-primary和split-screen-secondary的方式,在systemui中去实现的,其定制化的灵活度不是很高,很多业务都是放到sustemui或者fw去实现,但是随着版本的升高,后面出现了TaskView来替代了老版本的分屏方式,但是Task的核心原理其实和之前的方式是一样的,TaskView来实现分屏。

qq_18420641的博客 2614

Redhawk:toggle rate从哪来?

redhwak中toggle rate的相关设置

m0_61544122的博客 8110

终于有人把网络爬虫讲明白了

摘要:Python网络爬虫的详尽解释。导读:网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果...

苏克的博客 4331

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

网络爬虫是什么

作为一家大数据公司的运营小编,经常会有人问我“诶?你说的爬虫是什么呀”“爬虫的用途是什么呀?”“你们公司是卖爬虫的吗,有蜥蜴吗?”等一系列问题,面对这些问题,小编是绝望的。那么爬虫到底是什么呢? 一、爬虫是什么 以下是百度百科上对于网络爬虫的定义: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或

u011231755的博客 5万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

网络爬虫解析

网络爬虫(也称为网页蜘蛛、网络机器人)是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫可以用于从网站提取数据,例如监测社交媒体平台上的活动,或者从网上收集新闻和文章。它们也可以用于搜索引擎,如Google和Bing,来抓取和索引网页,以便在用户进行搜索时提供结果。URL通常由多个部分组成,包括协议类型(如HTTP、HTTPS)、主机名(域名或IP地址)、路径(资源在主机上的位置)以及可选的查询参数(用于传递额外的信息)。通过URL,用户可以方便地访问和定位到特定的网络资源。

2301_82032652的博客 2629

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

什么是网络爬虫?有什么用?怎么爬?终于有人讲明白了

【导读】网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高。 此时,我们可以使用网络爬虫对数据信息进行自动采集,比如应用于搜索引擎中对站点进行爬取收录,应用于数据分析与挖掘中对数据进行采集,应用于金融分析中对金融数据进行采集,除此之外,还可以将网络爬虫应用于舆情监测...

python学习者的博客 3万+

网络爬虫技术

本文介绍了网络爬虫的基础概念与应用。主要内容包括:1)爬虫定义与分类,分为通用、聚焦、增量式和深层网络爬虫四种类型;2)核心工作原理,涉及HTTP请求过程、响应结构和网页基础;3)常见爬取策略如宽度优先(BFS)和深度优先(DFS)遍历;4)Python中Requests库的使用方法,包括请求发送、响应处理和异常捕获。文章通过百度网页爬取实例,展示了网络爬虫从发送请求到获取响应的完整流程,为初学者提供了网络数据采集的基础知识框架。

2302_78993464的博客 2958

网络爬虫详解

网络爬虫(web crawler,又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 产生背景 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南

顺其自然~专栏 9167

网络爬虫的定义是什么?

网络爬虫的定义是什么?网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。网络爬虫在我们的生活中扮演怎样的角色?在数字化时代,信息如同潮水般汹涌而来。过去,我们可能依赖书籍、报纸或电视来获取信息,但这些渠道的信息量有限,而且筛选过的信息未必能满足我们的需求。如今,互联网为我们提供了海量的信息,但同时也带来了“信息过载”的问题。

logic1001的博客 2345

网络爬虫学习

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。类型:网络爬虫按照系统结构和实现技术,大致可以分为以下几种:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。

2303_77635734的博客 2464
上一篇: 大量数据情况下单线程插入和多线程(高并发)insert数据库的性能测试
下一篇: Java模拟并发操作进行服务器压力测试
八点二十四分
博客等级 码龄10年 29粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值