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

相关文章

Python结合Free Spire.PDF for Python实现PDF页面旋转

《Python结合FreeSpire.PDFforPython实现PDF页面旋转》在日常办公或文档处理中,我们经常会遇到PDF页面方向错误的问题,本文将分享如何用Python结合FreeSpir... 目录基础实现:单页PDF精准旋转完整代码代码解析进阶操作:覆盖多场景旋转需求1. 旋转指定角度(90/27

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

使用Python实现在PDF中添加、导入、复制、移动与删除页面

《使用Python实现在PDF中添加、导入、复制、移动与删除页面》在日常办公和自动化任务中,我们经常需要对PDF文件进行页面级的编辑,使用Python,你可以轻松实现这些操作,而无需依赖AdobeAc... 目录1. 向 PDF 添加空白页2. 从另一个 PDF 导入页面3. 删除 PDF 中的页面4. 在

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)

《在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)》DataGrip是JetBrains公司出品的一款现代化数据库管理工具,支持多种数据库系统,包括MySQL,:本文主要介绍在D... 目录前言一、登录 mysql 服务器1.1 打开 DataGrip 并添加数据源1.2 配置 MySQL

Springboot中JWT登录校验及其拦截器实现方法

《Springboot中JWT登录校验及其拦截器实现方法》:本文主要介绍Springboot中JWT登录校验及其拦截器实现方法的相关资料,包括引入Maven坐标、获取Token、JWT拦截器的实现... 目录前言一、JWT是什么?二、实现步骤1.引入Maven坐标2.获取Token3.JWT拦截器的实现4.

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

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

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