php用正则表达抓取网页中文章(爬虫过期目标网站怎么用设置cookie? )

优采云 发布时间: 2021-11-09 05:23

  php用正则表达抓取网页中文章(爬虫过期目标网站怎么用设置cookie?

)

  简介:使用爬虫时,某些网站爬虫需要登录才能爬取。一般网站有登录,信息通常以cookies的形式存储。所以有两种方式: 模拟登录获取cookies和所有带有cookies的请求,直接登录网站保存cookies,相当于写死;第一个在当时比较灵活,第二个会涉及到cookie过期目标网站:豆瓣+我的用户名(binbin)

  

  手动获取 cookie:查看请求

  

  1 使用 Jsoup 设置 cookie 和查看节点

  

  代码:

  package Jsoup;

import HttpClient.HttpClientPc;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import java.io.IOException;

/**

* 已经有了cookie

*/

public class LoginCookie {

public static void main(String[] args) throws IOException {

String url="https://www.douban.com/people/205769149/";

LoginCookie loginCookie=new LoginCookie();

String cookie="";

loginCookie.setCookies(url,cookie);

}

/**

* 手动设置 cookies

* 先从网站上登录,然后查看 request headers 里面的 cookies

* @param url

* @throws IOException

*/

public void setCookies(String url,String cookie) throws IOException {

Document document = org.jsoup.Jsoup.connect(url)

// 手动设置cookies

.header("Cookie", cookie)

.get();

//

if (document != null) {

// 获取豆瓣昵称节点

Element element = document.select(".info h1").first();

if (element == null) {

System.out.println("没有找到 .info h1 标签");

return;

}

// 取出豆瓣节点昵称

String userName = element.ownText();

System.out.println("豆瓣我的网名为:" + userName);

} else {

System.out.println("出错啦!!!!!");

}

}

}

  运行结果:

  

  模拟登录方式:登录链接:登录豆瓣

  

  

  代码:

  package Jsoup;

import org.jsoup.Connection;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

public class login {

public static void main(String[] args) throws IOException {

String loginUrl="https://accounts.douban.com/j/mobile/login/basic";

String userInfoUrl="https://www.douban.com/people/205769149/";

login login=new login();

login.jsoupLogin(loginUrl,userInfoUrl);

}

/**

* Jsoup 模拟登录豆瓣 访问个人中心

* 在豆瓣登录时先输入一个错误的账号密码,查看到登录所需要的参数

* 先构造登录请求参数,成功后获取到cookies

* 设置request cookies,再次请求

* @param loginUrl 登录url :https://accounts.douban.com/j/mobile/login/basic

* @param userInfoUrl 个人中心url https://www.douban.com/people/205769149/

* @throws IOException

*/

public void jsoupLogin(String loginUrl,String userInfoUrl) throws IOException {

// 构造登陆参数

Map data = new HashMap();

data.put("name","用户名");

data.put("password","密码");

data.put("remember","false");

data.put("ticket","");

data.put("ck","");

Connection.Response login = org.jsoup.Jsoup.connect(loginUrl)

.ignoreContentType(true) // 忽略类型验证

.followRedirects(false) // 禁止重定向

.postDataCharset("utf-8")

.header("Upgrade-Insecure-Requests","1")

.header("Accept","application/json")

.header("Content-Type","application/x-www-form-urlencoded")

.header("X-Requested-With","XMLHttpRequest")

.header("User-Agent","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36")

.data(data)

.method(Connection.Method.POST)

.execute();

login.charset("UTF-8");

// login 中已经获取到登录成功之后的cookies

// 构造访问个人中心的请求

Document document = org.jsoup.Jsoup.connect(userInfoUrl)

// 取出login对象里面的cookies

.cookies(login.cookies())

.get();

if (document != null) {

Element element = document.select(".info h1").first();

if (element == null) {

System.out.println("没有找到 .info h1 标签");

return;

}

String userName = element.ownText();

System.out.println("豆瓣我的网名为:" + userName);

} else {

System.out.println("出错啦!!!!!");

}

}

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线