Jsoup爬虫任务总结
这两周由于公司需要大量数据爬取进数据库给用户展示素材,在不停的做爬虫工作,现在总算基本完成就剩清理数据的工作;
公司有一个采集器管理后台的项目,可以直接把爬虫代码打包成jar导入进去设置定时参数即可;
关于Jsoup的一些命令使用示例:
解析html文档:
Document doc = Jsoup.parse(html);
从一个URL加载一个Document:
Document doc = Jsoup.connect("url").get();
示例一个通常的爬虫代码 :
public void testAddSBKK88EpubData() {
String url = "http://www.sbkk88.com/lizhishu/5fenzhonghemoshengrenchengweipengyou/";
String originUrl = "http://www.sbkk88.com";
FirefoxProfile firefoxProfile = new FirefoxProfile();
// 去掉css
//firefoxProfile.setPreference("permissions.default.stylesheet", 2);
// 去掉图片
//firefoxProfile.setPreference("permissions.default.image", 2);
// 去掉flash
firefoxProfile.setPreference("dom.ipc.plugins.enabled.libflashplayer.so", false);
FirefoxDriver driver = null;
try {
driver = new FirefoxDriver(firefoxProfile);
driver.get(url);
TimeUnit.SECONDS.sleep(3);
String html = driver.getPageSource();
//System.out.println(html);
org.jsoup.nodes.Document doc = Jsoup.parse(html);
Elements eles = doc.select("div.mingzhuLeft > ul.leftList li");
for(Element e:eles){
String title = e.select("a").text();
System.out.println(title);
String linkUrl = originUrl + e.select("a").attr("href");
org.jsoup.nodes.Document contentHtml = Jsoup.connect(linkUrl).get();
String content = contentHtml.select("div.f_article p").html();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (driver != null) {
driver.quit();
}
}
}
示例一个模拟登录网站代码:
private void login(String username, String password) {
driver.get(this.getRootUrl());
WebElement login = driver.findElement(By.xpath("//a[@class='in login fl']"));
if (login == null) {
return;
}
login.click();
WebElement phoneLogin = driver.findElement(By.xpath("//a[@class='do-phone-login']"));
while(phoneLogin == null){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
phoneLogin.click();
WebElement lastLogin = driver.findElement(By.xpath("//a[@class='sure-btn sure-success phone-login-btn']"));
while(lastLogin == null){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
driver.findElement(By.xpath("//input[@name='phone' and @class='form-put']")).clear();
driver.findElement(By.xpath("//input[@name='phone' and @class='form-put']")).sendKeys(username);
driver.findElement(By.xpath("//input[@name='passwd' and @class='form-put']")).clear();
driver.findElement(By.xpath("//input[@name='passwd' and @class='form-put']")).sendKeys(password);
lastLogin.click();
LOG.info("点击登录账号中~~~~~~~~~");
getPage();
// return focus to main window
// driver.switchTo().defaultContent();
}
还有模拟点击下载图片(可设置浏览器直接下载并自定义下载地址):
FirefoxProfile firefoxProfile = new FirefoxProfile();
// 去掉css
firefoxProfile.setPreference("permissions.default.stylesheet", 2);
// 去掉图片
firefoxProfile.setPreference("permissions.default.image", 2);
// 去掉flash
firefoxProfile.setPreference("dom.ipc.plugins.enabled.libflashplayer.so", false);
//设置默认下载
// 设置是否显示下载进度框
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
// browser.download.folderList 设置Firefox的默认 下载 文件夹。0是桌面;1是“我的下载”;2是自定义
firefoxProfile.setPreference("browser.download.folderList", 2);
// ,如果使用自定义路径,必须要将browser.download.folderList设置为2(下载到tomcat临时文件中)
firefoxProfile.setPreference("browser.download.dir", System.getProperty("java.io.tmpdir")+"\\material_images");
// 设置哪种类型的文件下载不询问直接下载
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","image/gif,image/png,image/jpeg,image/bmp,image/webp");
this.driver = new FirefoxDriver(firefoxProfile);
(采取下一个图片上传到阿里云,再删除原图片的措施)
//模拟点击免费下载
driver.findElement(By.id("detail_free_download_btn")).click();
File file = new File(System.getProperty("java.io.tmpdir")+"\\material_images");
File[] files = file.listFiles();
//只允许有一个文件
if (files.length == 1) {
file = files[0];
} else {
for (File f : files) {
f.delete();
}
return;
}
//获取图片io流并上传到阿里云,同时将本地文件删除
String content = FileUtil.upload(new FileInputStream(file), file.getName());
LOG.info("图片已上传到阿里云:{}", content);
file.delete();
Jsoup爬虫任务总结的更多相关文章
- jsoup爬虫简书首页数据做个小Demo
代码地址如下:http://www.demodashi.com/demo/11643.html 昨天LZ去面试,遇到一个大牛,被血虐一番,发现自己基础还是很薄弱,对java一些原理掌握的还是不够稳固, ...
- (java)Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页
Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页,输出 职位名称*****公司名称*****职位月薪*****工作地点*****发布日期 import java.io.I ...
- (java)Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息
Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息 此例将页面图片和url全部输出,重点不太明确,可根据自己的需要输出和截取: import org.jsoup.Jsou ...
- 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...
- JSOUP爬虫示例
利用JSOUP做爬虫,爬取我博客中的所有标题加链接,代码示例如下: package com.test.jsoup; import java.io.IOException; import org.jso ...
- HttpClient&Jsoup爬虫的简单应用
详细的介绍已经有很多前辈总结,引用一下该篇文章:https://blog.csdn.net/zhuwukai/article/details/78644484 下面是一个代码的示例: package ...
- 利用jsoup爬虫工具,爬取数据,并利用excel导出
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; i ...
- Jsoup爬虫解析
需要下载jsoup-1.8.1.jar包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQue ...
- jsoup爬虫,项目实战,欢迎收看
import com.mongodb.BasicDBObject import com.mongodb.DBCollection import org.jsoup.Jsoup import org.j ...
随机推荐
- C++中的类与封装
1,类的组合: 1,类不是孤立存在的,类之间都会有一些关系,组合就是类的基本关系之一: 2,电脑一般而言是由 CPU.内存.主板.键盘和硬盘等部件组合而成: 3,学习电脑组装需要多少时间?学习电脑组装 ...
- HDU 5159 Card( 计数 期望 )
Card Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- neo4j使用cypher查询路径避免出现环路
neo4j在使用可变长路径找两个点之前的所有路径时,会返回包含环路的路径(一个点在路径中出现两次),如下面的语句: MATCH path = (x)-[:KNOWS*]-(y) 可能返回a->b ...
- shell中#*,##*,#*,##*,% *,%% *的含义及用法
介绍下Shell中的${}.##和%%使用范例,本文给出了不同情况下得到的结果.假设定义了一个变量为:代码如下:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得 ...
- SQL数据库—<10>--查询练习题
待整理···· 45题.分页查询 学生选课数据库SQL语句练习题(45个题) 练习题网盘地址:点我 create database xxb go use xxb go --表(一)Student (学 ...
- c# 编程--方法(函数)
方法(函数) 能够独立完成某项功能的模块 函数的四要素:函数名.输入.输出.函数体 函数定义.函数的调用 函数就是将一堆代码进行重用的一种机制,函数就是一段代码,这段代码可能有输入的值(参 ...
- 进程调试--进程启动VS自动附加
程序启动VS自动附加到进程调试 1. 打开注册表regedit 2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\i ...
- 解决分布式事务基本思想Base和CPA理论、最终一致性|刚性事务、柔性事务
在学习解决分布式事务基本思路之前,大家要熟悉一些基本解决分布式事务概念名词比如:CAP与Base理论.柔性事务与刚性事务.理解最终一致性思想,JTA+XA.两阶段与三阶段提交等. 如何保证强一致性呢? ...
- 【leetcode】984. String Without AAA or BBB
题目如下: Given two integers A and B, return any string S such that: S has length A + B and contains exa ...
- 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读
前言近期, 全球权威IT咨询机构Forrester发布"The Forrester WaveTM: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型 ...