Advertisement

使用Jsoup与Httpclient进行模拟登录及数据抓取

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本教程介绍如何利用Java中的Jsoup和HttpClient库实现网页的模拟登录,并进一步抓取所需数据。适合需要自动化处理网站信息的开发者学习参考。 Jsoup与HttpClient结合使用进行模拟登录并抓取页面的Java代码如下所示: ```java package com.app.html; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; public class HttpClientHtml { private static final String SITE = login.goodjobs.cn; private static final int PORT = 80; private static final String loginAction = /index.php/action/UserLogin; private static final String forwardURL = http://user.goodjobs.cn/dispatcher.php/module/Personal/?skip_fill=1; // 其他静态常量省略 /** * 模拟登录 * * @param LOGON_SITE 登录站点地址 * @param LOGON_PORT 端口 * @param login_Action 登录动作URL * @param params 用户名和密码参数数组,包含两个元素:用户名及密码 */ private static HttpClient loginHtml(String LOGON_SITE, int LOGON_PORT, String login_Action, String...params) throws Exception { HttpClient client = new HttpClient(); client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT); // 设置登录参数并执行POST请求 PostMethod postLogin = new PostMethod(login_Action); NameValuePair[] postData = {new NameValuePair(memberName, params[0]), new NameValuePair(password, params[1])}; postLogin.setRequestBody(postData); client.executeMethod(postLogin); // 输出Cookies信息 CookiePolicy.getDefaultSpec().match(LOGON_SITE, LOGON_PORT, /, false, client.getState().getCookies()).forEach(cookie -> System.out.println(cookie)); return client; } /** * 使用已登录的客户端获取指定页面内容并保存为文件。 * * @param client 已经执行过loginHtml方法返回的HttpClient对象 * @param newUrl 需要访问的目标URL地址 */ private static String createHtml(HttpClient client, String newUrl) throws Exception { SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd); // 设置文件保存路径与名称 FileUtil.write(client.executeMethod(new PostMethod(newUrl)).getResponseBodyAsString(), toUrl + format.format(new Date())+ _ + 1 + .html); System.out.println(\n写入文件成功!); } /** * 使用Jsoup解析HTML代码,并对特定标签进行处理。 * * @param filePath HTML文档路径 * @param random 随机数,用于生成新的输出文件名 */ private static String JsoupFile(String filePath, int random) { SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd); try (BufferedReader in = new BufferedReader(new FileReader(filePath)); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(toUrl + format.format(new Date())+ _new_ + random+ .html), gbk))) { Document doc = Jsoup.parse(in, GBK); // 处理link标签 Elements links = doc.select(link); for (Element link : links) { String hrefAttr = link.attr(href).replace(/personal.css, css); if (hrefAttr.contains(/personal.css)) { Element hrefVal=link.attr(href, hrefAttr); out.write(hrefVal.toString()); } } // 处理script标签 Elements scripts = doc.select(script); for (Element js : scripts) { String jsrc = js.attr(src).replace(/scripts/fValidate/fValidate.one.js, _JS); if (jsrc.contains(/fValidate.one.js)) { Element val=js.attr(src, jsrc); out.write(val.toString()); } } // 处理body标签中的所有元素 Elements body = doc.getElementsByTag(body); for (Element tag : body.select(*)) { String src = tag.attr(src).replace(/images, Img); if (src.contains(/images)) { tag.attr(src, src); out.write(body.toString()); } } } catch (IOException e) { e.printStackTrace(); } return toUrl + format.format(new Date())+ _new_ + random + .html; } public static void main(String[] args) throws Exception { String [] params={admin,admin123}; HttpClient client = loginHtml(SITE, PORT, loginAction,params); createHtml(client, forwardURL

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 使JsoupHttpclient
    优质
    本教程介绍如何利用Java中的Jsoup和HttpClient库实现网页的模拟登录,并进一步抓取所需数据。适合需要自动化处理网站信息的开发者学习参考。 Jsoup与HttpClient结合使用进行模拟登录并抓取页面的Java代码如下所示: ```java package com.app.html; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; public class HttpClientHtml { private static final String SITE = login.goodjobs.cn; private static final int PORT = 80; private static final String loginAction = /index.php/action/UserLogin; private static final String forwardURL = http://user.goodjobs.cn/dispatcher.php/module/Personal/?skip_fill=1; // 其他静态常量省略 /** * 模拟登录 * * @param LOGON_SITE 登录站点地址 * @param LOGON_PORT 端口 * @param login_Action 登录动作URL * @param params 用户名和密码参数数组,包含两个元素:用户名及密码 */ private static HttpClient loginHtml(String LOGON_SITE, int LOGON_PORT, String login_Action, String...params) throws Exception { HttpClient client = new HttpClient(); client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT); // 设置登录参数并执行POST请求 PostMethod postLogin = new PostMethod(login_Action); NameValuePair[] postData = {new NameValuePair(memberName, params[0]), new NameValuePair(password, params[1])}; postLogin.setRequestBody(postData); client.executeMethod(postLogin); // 输出Cookies信息 CookiePolicy.getDefaultSpec().match(LOGON_SITE, LOGON_PORT, /, false, client.getState().getCookies()).forEach(cookie -> System.out.println(cookie)); return client; } /** * 使用已登录的客户端获取指定页面内容并保存为文件。 * * @param client 已经执行过loginHtml方法返回的HttpClient对象 * @param newUrl 需要访问的目标URL地址 */ private static String createHtml(HttpClient client, String newUrl) throws Exception { SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd); // 设置文件保存路径与名称 FileUtil.write(client.executeMethod(new PostMethod(newUrl)).getResponseBodyAsString(), toUrl + format.format(new Date())+ _ + 1 + .html); System.out.println(\n写入文件成功!); } /** * 使用Jsoup解析HTML代码,并对特定标签进行处理。 * * @param filePath HTML文档路径 * @param random 随机数,用于生成新的输出文件名 */ private static String JsoupFile(String filePath, int random) { SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd); try (BufferedReader in = new BufferedReader(new FileReader(filePath)); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(toUrl + format.format(new Date())+ _new_ + random+ .html), gbk))) { Document doc = Jsoup.parse(in, GBK); // 处理link标签 Elements links = doc.select(link); for (Element link : links) { String hrefAttr = link.attr(href).replace(/personal.css, css); if (hrefAttr.contains(/personal.css)) { Element hrefVal=link.attr(href, hrefAttr); out.write(hrefVal.toString()); } } // 处理script标签 Elements scripts = doc.select(script); for (Element js : scripts) { String jsrc = js.attr(src).replace(/scripts/fValidate/fValidate.one.js, _JS); if (jsrc.contains(/fValidate.one.js)) { Element val=js.attr(src, jsrc); out.write(val.toString()); } } // 处理body标签中的所有元素 Elements body = doc.getElementsByTag(body); for (Element tag : body.select(*)) { String src = tag.attr(src).replace(/images, Img); if (src.contains(/images)) { tag.attr(src, src); out.write(body.toString()); } } } catch (IOException e) { e.printStackTrace(); } return toUrl + format.format(new Date())+ _new_ + random + .html; } public static void main(String[] args) throws Exception { String [] params={admin,admin123}; HttpClient client = loginHtml(SITE, PORT, loginAction,params); createHtml(client, forwardURL
  • 使Java Jsouphttpclient动态
    优质
    本项目利用Java编程语言结合Jsoup与HttpClient库实现网页动态数据的抓取及解析。适合有志于深入学习Web爬虫技术的学习者参考实践。 主要介绍了使用Java爬虫Jsoup与httpclient获取动态生成的数据的相关资料。需要的朋友可以参考这些内容。
  • 使httpClientjsoup网页的实例jar包
    优质
    本教程提供了一个利用Java中的HttpClient和Jsoup库来抓取网络数据的具体案例,并介绍了所需依赖的jar包。适合希望学习如何进行网页数据采集的技术爱好者参考。 使用httpClient与jsoup抓取网页数据的实例及所需jar包如下: 首先需要导入相关库文件: - HttpClient用于发送HTTP请求。 - Jsoup处理HTML文档。 示例代码结构包括创建HttpClient对象,设置请求参数,并通过Jsoup解析返回的数据。 确保项目中已包含以下依赖项(具体版本号可能有所不同): - httpclient - jsoup 以上内容为使用httpClient和jsoup抓取网页数据的基本步骤与所需资源。
  • 使PythonRequests库简易示例
    优质
    本示文介绍了如何利用Python编程语言及其Requests库实现网页的简易登录操作,并演示了从网页中抓取所需数据的基本方法。 如果你还在为Python中的urllib和urlib、cookielib感到困扰,或者在模拟登录和抓取数据方面遇到困难,那么你应该试试requests库。它是一个非常强大的HTTP客户端库,非常适合用于Python的数据采集与模拟登录。 这里我们通过一个简单的示例来演示如何使用requests进行模拟登录: ```python import requests s = requests.Session() data = {user: 用户名, passdw: 密码} # 将post请求的目标地址替换为实际的登录页面URL res = s.post(http://www.x, data=data) ``` 这段代码展示了如何使用requests库来简化Python中的HTTP操作。
  • 使Python豆瓣电影评论的分析
    优质
    本项目通过Python编写代码实现对豆瓣电影评论页面的数据爬取,并运用数据处理技术对其进行分析,同时采用模拟登录方式提高数据获取效率。 最近奉俊昊的《寄生虫》在奥斯卡上获得了多个奖项,我也很喜欢看电影,在看过这部电影后对其他人的看法产生了好奇。于是使用Python中的R库爬取了部分豆瓣影评,并通过jieba分词制作了词云来了解网友们的观点。然而,如果不登录豆瓣直接进行爬取的话只能获取十页短评的数据量较小,因此我整理了一个方法利用Python模拟登陆豆瓣批量抓取数据并制作特别样式的词云。 所需的主要Python库包括: - os:提供访问操作系统服务的功能; - re:正则表达式处理; - time:时间标准库用于处理相关操作的时间间隔; - random:生成随机数的标准库,有助于避免被目标网站识别为爬虫用户; - requests:实现登录功能的HTTP请求库; 这里只列出了部分关键步骤和使用的Python库。接下来可以进一步开发和完善此方法以获取更多的数据并进行更深入的数据分析与可视化工作。
  • 使Java和Jsoup网页
    优质
    本项目采用Java编程语言及Jsoup库实现高效、便捷地从互联网上抓取所需信息,适用于各类网站的数据采集与分析任务。 使用Java结合Jsoup库可以方便地抓取网页数据并提取所需的特定信息。这种方法适用于需要自动化处理大量网络资源的场景,例如数据分析、内容聚合或监控网站更新等任务。通过解析HTML文档结构,开发者能够高效获取目标数据,并根据需求进行进一步的数据清洗和格式化工作。
  • 使Python知名网站的以方便受保护的
    优质
    本教程介绍如何利用Python编写脚本来实现对热门网站的自动登录功能,从而便捷地获取受密码保护的信息资源。 为了方便爬取需要登录的网站,可以模拟登录一些知名的网站。
  • Java Web中使HttpClient浏览器并发起请求
    优质
    本教程介绍如何在Java Web开发中利用HttpClient库模拟浏览器行为执行登录操作及后续数据请求,适用于需要自动化处理网页交互的应用场景。 在Java Web应用程序中使用HttpClient库模拟浏览器行为以实现登录并发起请求的技术,在爬虫、自动化测试及数据抓取等领域应用广泛。 执行这一过程需要遵循以下步骤: 1. 访问一个需先登录才能访问的页面或资源。 2. 服务器检查当前会话是否已包含有效的登录信息。如果未找到,将重定向至登录页。 3. 在登录表单中手动填写正确的用户名和密码并提交请求。 4. 如果验证通过,服务器将在Session中保存成功登陆的信息,并返回一个含有该登录状态的Cookie给客户端浏览器。 5. 浏览器携带此包含会话信息(如SessionID)的Cookie自动跳转回初始访问地址。 6. 服务端再次检查Session以确认用户是否已正确登录。如果验证通过,服务器将请求资源反馈至浏览器。 在Java中使用HttpClient库可以便捷地实现以上步骤。这里是一个简单的示例代码: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; public class HttpClientDemo { public static void main(String[] args) throws Exception { getResoucesByLoginCookies(); } private static void getResoucesByLoginCookies() throws Exception { String username = ...; // 登录用户名 String password = ...; // 登录密码 String urlLogin = http://hx.buscoming.cn/ApiSecurityLogon?UserCode= + username + &Password= + password; String urlAfter = http://hx.buscoming.cn/ApiSecurityGetLoginAccount; DefaultHttpClient client = new DefaultHttpClient(new PoolingClientConnectionManager()); 第一次请求登录页面 获得cookie HttpPost post = new HttpPost(urlLogin); HttpResponse response = client.execute(post); HttpEntity entity = response.getEntity(); 第二次请求需要的资源 HttpGet get = new HttpGet(urlAfter); response = client.execute(get); entity = response.getEntity(); } } ``` 此代码中,我们首先使用HttpPost方法模拟浏览器登陆服务器,接着利用HttpGet方式获取所需资源。整个过程中采用DefaultHttpClient对象,并通过PoolingClientConnectionManager来管理连接池以优化性能。 实际应用时需根据具体情况做出调整,如处理异常、Cookie管理等。
  • 使Jsoup国家统计局
    优质
    本项目利用Java库Jsoup编写代码,自动从国家统计局网站上抓取所需的数据信息,以便于进行数据分析和研究。 使用JSOUP爬取国家统计局的数据,包括省市区以及可选的镇、村级数据。