webmagic 怎么模拟登陆

webmagic 怎么模拟登陆,第1张

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

<code>import 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(

"http://blog.csdn.net/wgyscsf")

httpUriRequest

.setHeader("Accept",

"text/html,application/xhtml+xml,application/xmlq=0.9,image/webp,*/*q=0.8")

httpUriRequest.setHeader("Accept-Encoding", "gzip,deflate,sdch")

httpUriRequest.setHeader("Accept-Language", "zh-CN,zhq=0.8")

httpUriRequest.setHeader("Connection", "keep-alive")

// 模拟浏览器,否则CSDN服务器限制访问

httpUriRequest

.setHeader(

"User-Agent",

"Mozilla/5.0 (Windows NT 6.1WOW64) 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("https://passport.csdn.net/account/login?ref=toolbar")// 这个是登录的页面

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()

List<namevaluepair>nvps = new ArrayList<namevaluepair>()

nvps.add(new BasicNameValuePair("username", "[email protected]"))

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(

"https://passport.csdn.net/account/login?ref=toolbar", 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手动加进去

WebMagic框架可以通过HttpClient组件获取响应头和cookie。此外,该框架还可以调用WebMagic的cookies()方法,获取cookie值,也可以使用headers()方法获取响应头信息。

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>

   <groupId>us.codecraft</groupId>

   <artifactId>webmagic-core</artifactId>

   <version>0.5.3</version>

</dependency>

<dependency>

   <groupId>us.codecraft</groupId>

   <artifactId>webmagic-extension</artifactId>

   <version>0.5.3</version>

</dependency>1234567891012345678910

不使用maven的用户,可以去http://webmagic.io中下载最新的jar包。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11976337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存