jsoup能读写html5 cookie读写吗

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
* 模拟登陆Iteye
* @param userName 用户名
* @param pwd 密码
public void login(String userName, String pwd) throws Exception {
//第一次请求
Connection con = Jsoup.connect("https://www.pixiv.net/login.php");//获取连接
con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/ Firefox/29.0");//配置模拟浏览器
Response rs = con.execute();//获取响应
Document d1 = Jsoup.parse(rs.body());//转换为Dom树
List&Element& et = d1.select("#login-form");//获取form表单,可以通过查看页面源码代码得知
if(et.isEmpty()){
System.out.println("获取form表单失败");
//获取,cooking和表单属性,下面map存放post时的数据
Map&String, String& datas = new HashMap&&();
for (Element e : et.get(0).getAllElements()) {
if (e.attr("name").equals("name")) {
e.attr("value", userName);//设置用户名
if (e.attr("name").equals("password")) {
e.attr("value", pwd); //设置用户密码
if (e.attr("name").length() & 0) {//排除空值表单属性
datas.put(e.attr("name"), e.attr("value"));
* 第二次请求,post表单数据,以及cookie信息
Connection con2 = Jsoup.connect("https://www.pixiv.net/login.php");
con2.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/ Firefox/29.0");
//设置cookie和post上面的map数据
Response login = con2.ignoreContentType(true).method(Method.POST).data(datas).cookies(rs.cookies()).execute();
//打印,登陆成功后的信息
System.out.println(login.body());
//登陆成功后的cookie信息,可以保存到本地,以后登陆时,只需一次登陆即可
Map&String, String& map = login.cookies();
for (String s : map.keySet()) {
System.out.println(s + "
" + map.get(s));
问题出在获取不了form表单那里,et为空。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
咳咳....题主提供的网站不错....
这个网站可以这样登录:
public static void main(String[] args) throws IOException {
Map&String, String& loginPageCookies = Jsoup.connect("https://www.pixiv.net/login.php")
.method(Connection.Method.POST).execute().cookies();
String userName = "";
String password = "";
Connection.Response loginResponse = Jsoup.connect("https://www.pixiv.net/login.php")
.data("mode", "login", "pixiv_id", userName, "pass", password, "skip", "1")
.cookies(loginPageCookies)
.method(Connection.Method.POST).execute();
Map&String, String& userCookies = loginResponse.cookies();
System.out.println(Jsoup.connect("https://www.pixiv.net")
.cookies(userCookies).get().body());
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:博客分类:
本文来自:fair- 转截请注明出处
额 就是想做个简单的实验的 内容不对的地方欢迎拍砖...
使用JSOUP就行 这里给出点思路
我只做了自己的首页和其他人的微博首页的抓取 其他的抓取没尝试(不好意思 比较懒...)
首先是利用JSOUP进行登陆 获取页面 看了下微博的登陆表格 发现用了ajax的方式 所以代码获取cookie有点难
所以偷了个懒就用IE的开发者工具获取到了cookie 获取到的cookie要写成map的形式 然后用代码:
Response res=Jsoup.connect("").cookies(map).method(Method.POST).execute();
String s=res.body();
得到了下发现挺多的:
可以自己写段脚本来打印map.put(xxx,xxx)
我这里用scala写了段 用java写一样的 无所谓:
s.split("; ").foreach(s =& {val x=s.split("=");println(s"""map.put("${x(0)}","${x(1)}");""")});
最后得到的body 嗯......是一大堆的script标签 最上面是微博的固定的顶上那一栏的内容(导航条的内容)
lz尝试了下 发现需要的是 &script&FM.view 中一个id为pl_content_homeFeed的 他就是首页的内容
然后lz进行了下简单的处理 没有用正则 因为....额...写不好:
String s=res.body();
//System.out.println(s);
String[] ss=s.split("&script&FM.view");
//pl_content_homeFeed
for(String x:ss){
System.out.println(i++ + "======================================");
System.out.println(x.substring(0, x.length()&100?100:x.length()));
System.out.println("===========================================");
String content=ss[8].split("\"html\":\"")[1].replaceAll("\\\\n", "").replaceAll("\\\\t", "").replaceAll("\\\\", "");
content=content.substring(0, content.length()&=13?content.length():content.length()-13);
System.out.println(content);
输出的content就是首页显示的微博内容
不过这个输出的话unicode没有被转成中文字符 需要用native2ascii工具 去网上找到了一个:
/blog/346807
实测可以使用:
System.out.println(Native2AsciiUtils.ascii2Native(content));
注意了 以上的代码 lz是固定了主页的 所以在截取时直接用了index为8的
把post方法改成get方法 也可以获取到其他人的微博页
然后给出一个打印出获取的所有html内容的做法(试了一些主页可行):
package jsoupT
import java.io.IOE
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import org.jsoup.Connection.M
import org.jsoup.Connection.R
import org.jsoup.J
public class JsoupTest {
public static void main(String[] args) throws IOException {
Map&String, String& map = new HashMap&&();
//map.put请根据自己的微博cookie得到
Response res = Jsoup.connect("/u/别人的主页id")
.cookies(map).method(Method.GET).execute();
String s = res.body();
System.out.println(s);
String[] ss = s.split("&script&FM.view");
int i = 0;
// pl_content_homeFeed
// pl.content.homeFeed.index
List&String& list = new ArrayList&&();
for (String x : ss) {
System.out.println(i++ + "======================================");
System.out.println(x.substring(0,
x.length() & 200 ? 200 : x.length()));
System.out.println("===========================================");
if (x.contains("\"html\":\"")) {
String value = getHtml(x);
list.add(value);
System.out.println(value);
// content=ss[8].split("\"html\":\"")[1].replaceAll("(\\\\t|\\\\n)",
// "").replaceAll("\\\\\"", "\"").replaceAll("\\\\/", "/");
// content=content.substring(0,
// content.length()&=13?content.length():content.length()-13);
// System.out.println(Native2AsciiUtils.ascii2Native(content));
public static String getHtml(String s) {
String content = s.split("\"html\":\"")[1]
.replaceAll("(\\\\t|\\\\n|\\\\r)", "").replaceAll("\\\\\"", "\"")
.replaceAll("\\\\/", "/");
content = content.substring(0,
content.length() &= 13 ? content.length()
: content.length() - 13);
return Native2AsciiUtils.ascii2Native(content);
抓取的内容应该要适当格式化一下才可以用Jsoup做解析
不过试了下直接做解析也没什么问题(虽然有一些标签错误)
这只是个页面抓取的策略 其他的我不想多写了 大家自己实践一下 前提是你用自己的新浪微博的cookie进行抓取
浏览: 218040 次
来自: 杭州
多谢 解决了困扰我的问题
tess3Wrapper
因为onDestroy() 在Fragment
不会执行!也 ...
新人,希望大神们能多分享职场的一些东西
tomcat的参数你都没有设置...而netty本来默认就没有 ...使用背景:
  使用网络爬虫(或者手动复制),从别的网站上下载下来的内容,都是一堆的html,很多标签、样式 等等都可能是你所不需要的,或者 想要变成你想要的样式。那么该怎么办呢?
  我们知道,每一个网页都是一个html,那么下载下来的内容则可能是完全或不完全的html 片段
  使用Jsoup 可以解析 html
1、解析一个HTML字符串
使用Jsoup 来解析一个HTML 文档。使用静态&方法或&示例代码:
String html = "&html&&head&&title&First parse&/title&&/head&"
+ "&body&&p&Parsed HTML into a doc.&/p&&/body&&/html&";
Document doc = Jsoup.parse(html);
  其解析器能够尽最大可能从你提供的html 文档 来创建一个干净的解析结果,无论html 的格式是否完整
  比如它可以处理:
没有关闭的标签 (比如:&&p&Lorem &p&Ipsum&parses to&&p&Lorem&/p& &p&Ipsum&/p&)
隐式标签 (比如. 它可以自动将&&td&Table data&/td&包装成&table&&tr&&td&?)
创建可靠的文档结构(html标签包含head 和 body,在head只出现恰当的元素)
& &&&这方法能够将输入的HTML解析为一个新的文档 (Document),参数 baseUri 是用来将相对 URL 转成绝对URL,并指定从哪个网站获取文档。
  如这个方法不适用,你可以使用&&方法来解析成HTML字符串如上面的示例。.
  只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少)&一个head和一个body元素。
  一旦拥有了一个Document,你就可以使用Document中适当的方法或它父类&和中的方法来取得相关数据。
一个文档的对象模型
文档由多个Elements和TextNodes组成 (以及其它辅助nodes:详细可查看:).
其继承结构如下:继承继承.&继承&.
一个Element包含一个子节点集合,并拥有一个父Element。他们还提供了一个唯一的子元素过滤列表。
2、解析一个body片断
假如你有一个HTML片断 (比如. 一个&div&包含一对&p&标签; 一个不完整的HTML文档) 想对它进行解析。这个HTML片断可以是用户提交的一条评论或在一个CMS页面中编辑body部分。
String html = "&div&&p&Lorem ipsum.&/p&";
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();
parseBodyFragment&方法创建一个空壳的文档,并插入解析过的HTML到body元素中。假如你使用正常的&&方法,通常你也可以得到相同的结果,但是明确将用户输入作为 body片段处理,以确保用户所提供的任何糟糕的HTML都将被解析成body元素。
&方法能够取得文档body元素的所有子元素,与&doc.getElementsByTag("body")相同。
保证安全Stay safe
假如你可以让用户输入HTML内容,那么要小心避免跨站脚本攻击。利用基于&&的清除器和&方法来清除用户输入的恶意内容。
3、从一个URL加载一个Document
你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据。你可以使用下面解决方法:
使用&方法:
Document doc = Jsoup.connect("/").get();
String title = doc.title();
&方法创建一个新的&, 和&&取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。
&接口还提供一个方法链来解决特殊请求,具体如下:
Document doc = Jsoup.connect("")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
这个方法只支持Web URLs (http和https&协议); 假如你需要从一个文件加载,可以使用&代替。
4、从一个文件加载一个文档
在本机硬盘上有一个HTML文件,需要对它进行解析从中抽取数据或进行修改。
可以使用静态&&方法:
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "/");
&这个方法用来加载和解析一个HTML文件。如在加载文件的时候发生错误,将抛出IOException,应作适当处理。
baseUri&参数用于解决文件中URLs是相对路径的问题。如果不需要可以传入一个空的字符串。
另外还有一个方法&,它使用文件的路径做为&baseUri。 这个方法适用于如果被解析文件位于网站的本地文件系统,且相关链接也指向该文件系统。
参考链接:
阅读(...) 评论()& & & 有时候抓取网页信息的时候,有些网页需要先登录才能查看到真正的内容。这样用我们上一篇文章的方法是无法直接抓取数据的。
例如抓取网页:/code-set.php?set=CPT 上的 CPT codes
登录前,显示如下:
登录后显示:
我们要抓取的信息是登录后显示的内容。
解决这个问题的方法很简单。Jsoup给我们提供了cookies的功能,我们只要将我们自己账号登录的cookies传递给Jsoup就可以实现登录用户的访问。
1。 首先,登录自己的账号。
2。然后,在chrome中&Chrome -& setting-&Content settings-&Cookies-&&All cookies and site data& 找到find
对应的cookies
从图中可以看出这里有4个cookie的键值我们需要关心。
3。使用Jsoup 加载cookies
Map&String, String& cookies =
cookies = new HashMap&String, String&();
cookies.put(&PHPSESSID&, &pue5b6f642cu21v7qun47hs3b5&);
cookies.put(&__ar_v4&, &CQJDWEV345EJ7P3MLKOZX3%3AA3%7CZFX3A7FMXJARPKT2GZ64XZ%3AA3%7CYUDUMC5DENC6LMIX6UQP3E%3AA3&);
cookies.put(&fac_type&, &F&);
cookies.put(&show_sign_in&, &T&);
Document doc = Jsoup.connect(pageUrl).cookies(cookies).get();
4。连接成功后,使用第一篇文章的方法抓取数据。
本文已收录于以下专栏:
相关文章推荐
今天解析网页的时候,遇到必须登录后才能够访问的问题,在网上搜索了一些资料,反正有人做出来了,不过是使用HttpClient+Jsoup来实现的,我不清楚他们使用什么版本的Jsoup,地址:
使用HttpClient最新版本,下载地址Download
注释已经写的比较清楚了,就不再说明了。
爬取到的html内容,既可以用java正则表达式截取,也可以用jsoup(下载地址:Downlo...
Jsoup Java 库是一款非常好用的网页数据抓取工具。 API非常简单。功能强大。
官方网站为:http://jsoup.org/
下面举个例子,怎样抓取网页数据。
下面网页是ICD-9-CM (...
Connection conn = Jsoup.connect(&/city.php?name=CHANGZHOU&);
概述:本周五,接到一个任务,要使用爬虫技术来获取某点评网站里面关于健身场馆的数据,之前从未接触过爬虫技术,于是就从网上搜了一点学习资料,本篇文章就记录爬虫技术Jsoup技术,爬虫技术听名称很牛叉,其实...
直奔主题:
本篇文章是给有jsoup抓包基础的人看的......
今天小编给大家写一篇对于jsoup抓包时需要输入验证码的解决方法之一。大神就绕道,嘿嘿~
任何抓包的基础都是基于Http协议来进...
爬虫+jsoup轻松爬知乎爬知乎
目录抓包介绍
解决验证码的思路
解析htmlparse
数据库操作程序db
近期,有人将本人博客,复制下来,直接上传到百度文库等平台。
本文为原创博客,仅供...
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
废话不多说直接讲讲今天要做的事。利用HttpClient和Jsoup技术抓取网页信息。HttpClient是支持HTTP协议的客户端编程工具包,并且它支持HTTP协议。jsoup 是一款基于 Java...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 html5 cookie读写 的文章

 

随机推荐