今天给各位分享webmagicjava的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、通过WebMagic认识正则表达式和XPATH教程2、webmagic 怎么模拟登陆3、请问Java爬虫里WebMagic和Jsoup的关系是什么?4、使用java语言爬取自己的淘宝订单看看买了哪些东西?
通过WebMagic认识正则表达式和XPATH教程
最近在自学JAVA的过程中,偶然想到了做个爬虫程序,经过简单的对比,发现了WebMagic这个库,在使用库的过程中因为涉及到正则表达式和XPATH,所以做个笔记,记录一下,否则稍微过段时间不看就忘记了。
以内涵社区为例,打开 内涵社区 ,然后右键“检查”(Chrome浏览器,得到如下html,这里只截取其中一部分作为示例)
然后,开始我们的爬虫程序:
创建一个类GithubRepoPageProcessor(为什么叫Github…因为跟着写demo的时候创建的,懒得修改了)继承PageProcessor,并实现方法:
好,那么这里就要用正则和XPATH提取我们需要的内容了:
先来看下正则表达式的常用字符:
接下来使用上面的html文件依次举例:
1、获取所有的数字
扩展例子:
2、获取所有p标签里的内容
3、获取所有的href内容
分析GithubRepoPageProcessor里面的内容:
创建MainApp写入main方法并调用运行
最终效果:
webmagic 怎么模拟登陆
webmagic模拟登录方案:方案一:模拟浏览器登录,用代码模拟表单填写,然后获取登陆后的信息,用apache的“HttpClients”进行信息保存。不需要考虑cookie失效问题。
方案二:直接拿去cookie信息,进行设置。可能会用时间限制,超过一定时间就不能再使用了,需要重新设置。
方案一实现:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
codeimport java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import com.wgyscsf.utils.HttpUtils;
public class SimulateLoginPolicy1 {
static boolean result = false;
public static void main(String[] args) {
loginCsdnPager();
try {
loginedPager();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void loginedPager() throws IOException,
ClientProtocolException {
HttpUriRequest httpUriRequest = new HttpPost(
“”);
httpUriRequest
.setHeader(“Accept”,
“text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8”);
httpUriRequest.setHeader(“Accept-Encoding”, “gzip,deflate,sdch”);
httpUriRequest.setHeader(“Accept-Language”, “zh-CN,zh;q=0.8”);
httpUriRequest.setHeader(“Connection”, “keep-alive”);
// 模拟浏览器,否则CSDN服务器限制访问
httpUriRequest
.setHeader(
“User-Agent”,
“Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36”);
HttpResponse response = HttpUtils.httpClient.execute(httpUriRequest);
InputStream content = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(content));
String line = “”;
String result = “”;
while ((line = br.readLine()) != null) {
result += line;
}
br.close();
System.out.println(result);
}
/**
* 登录页面
*/
private static void loginCsdnPager() {
String html = HttpUtils
.sendGet(“”);// 这个是登录的页面
Document doc = Jsoup.parse(html);
// 获取表单所在的节点
Element form = doc.select(“.user-pass”).get(0);
String lt = form.select(“input[name=lt]”).get(0).val();
String execution = form.select(“input[name=execution]”).get(0).val();
String _eventId = form.select(“input[name=_eventId]”).get(0).val();
Listnamevaluepair nvps = new ArrayListnamevaluepair();
nvps.add(new BasicNameValuePair(“username”, “wgyscsf@163.com”));
nvps.add(new BasicNameValuePair(“password”, “wanggaoyuan”));
nvps.add(new BasicNameValuePair(“lt”, lt));
nvps.add(new BasicNameValuePair(“execution”, execution));
nvps.add(new BasicNameValuePair(“_eventId”, _eventId));
String ret = HttpUtils.sendPost(
“”, nvps);
if (ret.indexOf(“redirect_back”) -1) {
System.out.println(“登陆成功”);
result = true;
} else if (ret.indexOf(“登录太频繁”) -1) {
System.out.println(“登录太频繁,请稍后再试。。。。。”);
return;
} else {
System.out.println(“登陆失败。”);
return;
}
}
}/namevaluepair/namevaluepair/code
方案二:使用浏览器的开发者工具将cookie手动加进去
请问Java爬虫里WebMagic和Jsoup的关系是什么?
爬虫基本流程是 请求,解析,存储。
WebMagic主要用来请求网络并且提取相应的地址,而Jsoup用来解析html,他们是相辅相成的关系。
使用java语言爬取自己的淘宝订单看看买了哪些东西?
Java爬虫框架WebMagic简介及使用
一、介绍
webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。webmagic采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie等功能。
二、概览
WebMagic项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分则包括一些便利的、实用性的功能(例如注解模式编写爬虫等)。
WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。
2.1 WebMagic的四个组件
Downloader
Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。
PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。除非项目有一些特殊的分布式需求,否则无需自己定制Scheduler。
Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。
2.2 用于数据流转的对象
Request
Request是对URL地址的一层封装,一个Request对应一个URL地址。它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式。
Page
Page代表了从Downloader下载到的一个页面——可能是HTML,也可能是JSON或者其他文本格式的内容。Page是WebMagic抽取过程的核心对象,它提供一些方法可供抽取、结果保存等。
ReusltItems
ReusltItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。它的API与Map很类似,值得注意的是它有一个字段skip,若设置为true,则不应被Pipeline处理。
2.3 控制爬虫运转的引擎—Spider
Spider是WebMagic内部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能。Spider也是WebMagic操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能。
对于编写一个爬虫,PageProcessor是需要编写的部分,而Spider则是创建和控制爬虫的入口。
2.4 WebMagic项目组成
WebMagic项目代码包括几个部分,在根目录下以不同目录名分开。它们都是独立的Maven项目。
WebMagic主要包括两个包,这两个包经过广泛实用,已经比较成熟:
webmagic-core
webmagic-core是WebMagic核心部分,只包含爬虫基本模块和基本抽取器。
webmagic-extension
webmagic-extension是WebMagic的主要扩展模块,提供一些更方便的编写爬虫的工具。包括注解格式定义爬虫、JSON、分布式等支持。
三、 基本的爬虫
3.1 爬虫的流程 (可以参考上边的框架架构图)
Downloader-页面下载
页面下载是一切爬虫的开始。
大部分爬虫都是通过模拟http请求,接收并分析响应来完成。这方面,JDK自带的HttpURLConnection可以满足最简单的需要,而Apache HttpClient(4.0后整合到HttpCompenent项目中)则是开发复杂爬虫的不二之选。它支持自定义HTTP头(对于爬虫比较有用的就是User-agent、cookie等)、自动redirect、连接复用、cookie保留、设置代理等诸多强大的功能。
webmagic使用了HttpClient 4.2,并封装到了HttpClientDownloader。学习HttpClient的使用对于构建高性能爬虫是非常有帮助的,官方的Tutorial就是很好的学习资料。目前webmagic对HttpClient的使用仍在初步阶段,不过对于一般抓取任务,已经够用了
PageProcessor-页面分析及链接抽取
Selector是webmagic为了简化页面抽取开发的独立模块,是整个项目中我最得意的部分。这里整合了CSS Selector、XPath和正则表达式,并可以进行链式的抽取,很容易就实现强大的功能。即使你使用自己开发的爬虫工具,webmagic的Selector仍然值得一试
Jsoup
HtmlParser
Apache tika
HtmlCleaner与Xpath
这里说的页面分析主要指HTML页面的分析。页面分析可以说是垂直爬虫最复杂的一部分,在webmagic里,PageProcessor是定制爬虫的核心。通过编写一个实现PageProcessor接口的类,就可以定制一个自己的爬虫
HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具:
webmagic的Selector
Scheduler-URL管理
URL管理的问题可大可小。对于小规模的抓取,URL管理是很简单的。我们只需要将待抓取URL和已抓取URL分开保存,并进行去重即可。使用JDK内置的集合类型Set、List或者Queue都可以满足需要。如果我们要进行多线程抓取,则可以选择线程安全的容器,例如LinkedBlockingQueue以及ConcurrentHashMap。因为小规模的URL管理非常简单,很多框架都并不将其抽象为一个模块,而是直接融入到代码中。但是实际上,抽象出Scheduler模块,会使得框架的解耦程度上升一个档次,并非常容易进行横向扩展,这也是我从scrapy中学到的。
Pipeline-离线处理和持久化
Pipeline其实也是容易被忽略的一部分。大家都知道持久化的重要性,但是很多框架都选择直接在页面抽取的时候将持久化一起完成,例如crawer4j。但是Pipeline真正的好处是,将页面的在线分析和离线处理拆分开来,可以在一些线程里进行下载,另一些线程里进行处理和持久化。
3.2 使用WebMagic爬取一个壁纸网站
首先引入WebMagic的依赖,webmagic-core-{version}.jar和webmagic-extension-{version}.jar。在项目中添加这两个包的依赖,即可使用WebMagic。
maven中引入依赖jar包
dependency
groupIdus.codecraft/groupId
artifactIdwebmagic-core/artifactId
version0.5.3/version
/dependency
dependency
groupIdus.codecraft/groupId
artifactIdwebmagic-extension/artifactId
version0.5.3/version
/dependency1234567891012345678910
不使用maven的用户,可以去中下载最新的jar包。
关于webmagicjava和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。