Webmagic 爬虫之通过cookie进行页面登录

2023-10-22 17:20

本文主要是介绍Webmagic 爬虫之通过cookie进行页面登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍:


首先先来介绍下webmagic这个爬虫框架,这个框架是大佬黄义华开源的爬虫框架,用起来非常的顺手, 跟之前用python中的scrapy框架一样,层次非常清晰,可扩展性也是非常的好。文档也比较齐全,并且现在还在一直更新。

优点就说这些,但是也有一些不足,在我学习的过程中,遇到了一些问题,比如就是没有关于登录的例子,并且没有google出相关的内容,这里是自己摸索的出的一种方法。


在使用爬虫的过程中,有的网站的信息必须是要登录后才能查看的,这里就拿世纪佳缘网作为例子,来进行一个登陆的测试。

首先在没有用户登陆的情况下,我们是看不到世纪佳缘网上用户的一些经济信息的,如下图所示:

这里写图片描述


这是登陆后的页面,就可以看到用户的经济方面的信息了,同时使用chrome看到页面的cookie信息。

这里写图片描述


如果我想要爬取到这些信息,肯定是要进行登陆才可以的,这里就要获取到cookie的信息,webmagic中整合了Selenium这个模拟浏览器,来帮助我们进行登陆并,但是效率会有点慢,也可以使用phantomjs。


首先先引入webmagic对Selenium的整合jar包,这里使用的是maven管理。

    </dependency><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-selenium</artifactId><version>0.5.2</version></dependency>

从上面的图可以看到cookie的信息非常的多,而登录需要的cookie就在其中,而且每个页面中的cookie也不是一样,我们不可能一个个去试,最要命的是webmagic中的site 没有 scrapy中的setCookies()函数,一次只能添加一个cookie信息。要想添加全部的cookie信息,就要使用下面的方法.

因为要模拟浏览器,所以要下载个当前浏览器的驱动,我使用的chrome
这是驱动的下载地址http://download.csdn.net/detail/leoe_/9903768,如果使用的是其他的浏览器,可以自行去搜索下,让后把驱动放在 C:\Windows\System32 文件下就可以了。

废话不多说,上代码,如果没有接触过webmagic和Selenium可以先了解下,再去运行下面的代码。


package org.will.WebMagic;import java.util.List;
import java.util.Set;import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;public class Miai implements PageProcessor {private Site site = Site.me().setRetryTimes(3).setSleepTime(0).setTimeOut(3000);//用来存储cookie信息private Set<Cookie> cookies;@Overridepublic void process(Page page) {    //获取用户的idpage.putField("", page.getHtml().xpath("//div[@class='member_info_r yh']/h4/span/text()"));//获取用户的详细信息List<String> information = page.getHtml().xpath("//ul[@class='member_info_list fn-clear']//li/div[@class='fl pr']/em/text()").all();page.putField("information = ", information);}//使用 selenium 来模拟用户的登录获取cookie信息public void login(){WebDriver driver = new ChromeDriver();driver.get("http://login.jiayuan.com/?channel=200&position=204&pre_url=http%3A%2F%2Fsearch.jiayuan.com%2Fv2%2F");driver.findElement(By.id("login_email")).clear();//在******中填你的用户名driver.findElement(By.id("login_email")).sendKeys("*******");driver.findElement(By.id("login_password")).clear();//在*******填你密码driver.findElement(By.id("login_password")).sendKeys("*******");//模拟点击登录按钮driver.findElement(By.id("login_btn")).click();//获取cookie信息cookies = driver.manage().getCookies();driver.close(); }@Overridepublic Site getSite() { //将获取到的cookie信息添加到webmagic中for (Cookie cookie : cookies) { site.addCookie(cookie.getName().toString(),cookie.getValue().toString());}return site.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1");           }public static void main(String[] args){Miai miai = new Miai();//调用selenium,进行模拟登录miai.login();Spider.create(miai).addUrl("http://www.jiayuan.com/164830633").run();}
}

这是代码运行的结果:已经可以爬下来用户的全部信息了。

这里写图片描述


可以结合代码自己找个页面试试,代码中有注释,这只是我想到的一种登录的方法,我也是刚学习这个框架,如果有什么不对请指出来,或者有更好的方法也可以分享下。

这篇关于Webmagic 爬虫之通过cookie进行页面登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262667

相关文章

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin