1. 程式人生 > >爬蟲繞過“登入頁面”

爬蟲繞過“登入頁面”

        當我們在寫爬蟲的時候,往往會遇到很多反爬的問題。

        比如:在登入頁面設定驗證碼、掃描二維碼登入、滑動滑鼠登入、手機簡訊驗證碼登入等等。這裡介紹一種個人已經實現的方法——繞過登入頁面。這裡的繞過不是說真的可以繞過登入,除非這個系統本來就有問題,這是這個系統天大的bug。這裡說的繞過登入是指登入一次記住cookie資訊,下次登入的時候就直接跳過了登入的頁面。廢話不多說,直接上程式碼:

package com.xiaojiang.spidertest;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.HttpCookie;
import java.util.zip.GZIPInputStream;

import org.apache.commons.io.IOUtils;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import com.xiaojiang.exception.DataTaskException;
import com.xiaojiang.httpclient.HttpUserAgent;

public class CookieTest {

	
	public static void main(String[] args) throws Exception, IOException {
		
		DefaultHttpClient client = new DefaultHttpClient();
		HttpResponse response = null;
		
		String newUrl = "http://www.dajie.com/home";
		HttpGet httpGet = new HttpGet(newUrl);
		
		//在頁面控制檯執行document.cookie
		String cookie = "DJ_RF=empty; DJ_EU=http%3A%2F%2Fwww.dajie.com%2Fhome; DJ_UVID=MTQ2MTkwNzk3NDU4MTg1NjQ2; dj_cap=0564c054acc1ce12402998471ae0af54; regSucceedType=email; dj_auth_v3=MrZrP3TGNRNXCNiOpQY7Ggscf4kjfEEsJzFPDzu3iwi5XtG9tS3Sw-WgChC2DVKL; uchome_loginuser=35375099; USER_ACTION=\"request^AProfessional^AREG^Aregm:crt0^A-\"; send_verify_mail=961254858%40qq.com; login_email=961254858%40qq.com; inbound_tag=true";
		httpGet.addHeader(new BasicHeader("Cookie", cookie));
		
		httpGet.setHeader("Accept-Language", "zh-cn,zh;q=0.5");
		httpGet.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
		httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		httpGet.setHeader("Accept-Encoding", "gzip, deflate");
		httpGet.setHeader("User-Agent", HttpUserAgent.get()); 
		
		response = client.execute(httpGet);
		String html = formatResponse(response);
		Document doc = Jsoup.parse(html);
		String text = doc.select(".feed-header").get(0).text();
		
		System.out.println(text);
		
		httpGet.releaseConnection();
		
		
		
	}
	
	private static String formatResponse(HttpResponse response) throws Exception {
		
		ByteArrayInputStream bis = null;
		Header contentEncoding = response.getFirstHeader("Content-Encoding");
		
		if(contentEncoding == null){
			return EntityUtils.toString(response.getEntity(),"UTF-8");
		} else {
			
			String charset = "utf-8";
			Header contentType = response.getFirstHeader("Content-Type");
			
			if(contentType != null){
				String contentTypeStr = contentType.getValue();
				if(contentTypeStr != null && !"".equals(contentTypeStr)){
					charset = contentTypeStr.substring(contentTypeStr.indexOf("=") + 1,contentTypeStr.length());
					
				}
			}
			
			String contentEncodingType = contentEncoding.getValue();
			if(contentEncodingType.equalsIgnoreCase("gzip")){
				if(response.toString().contains("soufun"))
					charset = "gb2312";
				
				byte[] bytes = IOUtils.toByteArray(response.getEntity().getContent());
				bis = new ByteArrayInputStream(bytes);
				
				return uncompress(bis ,charset);
			}
			
		}
			
		
		return null;
	}

	
	/**
	 * GZIP解壓
	 */
	private static String uncompress(ByteArrayInputStream in, String charset) {

		ByteArrayOutputStream out = new ByteArrayOutputStream();
		
		try {
			GZIPInputStream gunzip = new GZIPInputStream(in);
			byte[] buffer = new byte[256];
			int n;
			while((n = gunzip.read(buffer)) >=0 ){
				out.write(buffer, 0, n);
			}
			return out.toString(charset);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	
}

接下來就是存在以下問題:這個使用者很有可能面臨被封號,或者登出啦。個人意見。多個使用者登入,隨機挑選cookie資訊。就像隨機挑選代理一樣。

相關推薦

爬蟲繞過登入頁面

        當我們在寫爬蟲的時候,往往會遇到很多反爬的問題。         比如:在登入頁面設定驗證碼、掃描二維碼登入、滑動滑鼠登入、手機簡訊驗證碼登入等等。這裡介紹一種個人已經實現的方法——繞過登入頁面。這裡的繞過不是說真的可以繞過登入,除非這個系統本來就有問題,這

爬蟲自動登入訪同授權頁面

http.cookiejar模組 該模組主要的類有 Cookiejar,、 Filecookiejar、 MozillaCooklejar、 LwpCookiejar。這四個的作用分別如下 1.CookieJar:管理HTTPcookie值、儲存HTTP請求生成的cookie、向傳出的HTTP請求加

禁止瀏覽器返回登入頁面

輸入 func 需要 pre 但是 back self 彈框 hist 目前很多項目都沒有特意做這個處理,就是瀏覽器返回到登入頁面,然後點擊下一頁箭頭,可以進入,但是如果有這個需求只需要在禁止的那個頁面,輸入如下代碼即可 <script>

HTML跳轉路徑/重新登入頁面巢狀問題

HTML跳轉路徑(js中) location.href = './login.html'; /***************************************/ if (window!=top)

JavaWeb-登入的驗證與自動跳轉到登入頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%-- 本行程式碼可以防止亂碼出現 --%> <% String path = req

idea+maven + spring security +springmvc入門 (自定義登入頁面),附idea如何建立web專案

第一次使用idea,上午在eclipse中 學習了spring security 入門,下午試試在idea中搭建。 剛開始 我以為 直接將eclipse的 檔案 copy過來就行了,結果發現copy過來以後 各種報錯。 後來把m

vue路由設定,登入失效後跳轉到去登入頁面登入後開啟的是你最後登入頁面

main.js   router.beforeEach((to, from, next) => {     document.title=to.name;   //讓頁面title顯示路由對應的name值--xlz &

[Swift4.2實際操作]九、完整例項-(7)登入頁面:建立自定義檢視及相關元件

本文將開始建立登入頁面,首先建立該頁面所需的一些自定義元件:做為登入按鈕的自定義檢視物件。在【RegLogin】組的名稱上點選滑鼠右鍵,開啟右鍵選單。【New File】->【Cocoa Touch Class】建立新檔案【RegButton.swift】Name:RegButtonSubclass:S

Selenium+Python自動化之如何繞過登入驗證碼

一、使用Fiddler抓包 1.一般登陸網站成功後,會生成一個已登入狀態的cookie,那麼只需要直接把這個值拿到,用selenium進行addCookie操作即可。 2.可以先手動登入一次,然後抓取這個cookie,這裡我們就需要用抓包工具fiddler了 3.先開啟部落格園登入介面,手動輸入賬號和密

從iframe框架進入登入頁面時跳出iframe到頂層頁面

問題描述,開發的easyui專案中使用了iframe框架。當在瀏覽器開啟一個頁面登入專案後,再開啟一個登入到專案的首頁。當從其中一個的頁面退出後,如果在另一個頁面中點選選單或其他功能時,請求會被登入攔截器攔截到登入頁面。這時,登入頁面出現在iframe框架中,而不是整個頁面跳轉到登入頁面。

vue頁面無操作10分鐘內調轉到登入頁面

思路: 頁面在設定時間內無任何操作(滑鼠的點選、滑動、路由的切換、是否請求介面等),跳轉到登入頁,在跳轉前把url存起來,點選登入的時候用。 下面介紹其中的一種方法,滑鼠的滑動時間:(用到base64加密) <template> <div id="app" @mou

登入頁面加入隨機生成的驗證碼驗證登入

1.前端頁面,在點選驗證碼時傳送請求,獲得隨機驗證碼 <ul> <li class="user_main_text">驗證碼: </li> <li class="user_main_input"> <

JS-會員登入頁面

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>會員登入</title> <link rel="stylesheet" h

Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面登入成功,在Chrome中可以正常顯示登入頁面登入失敗

問題描述:Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功,在Chrome中可以正常顯示登入頁面,登入失敗   解決方法:將打包後的dist\index.html放到http伺服器上執行就可以登入了。   總結:

爬蟲------github登入

爬蟲------github登入 import requests from bs4 import BeautifulSoup r1 = requests.get( url='https://github.com/login' ) s1 = BeautifulSoup(r1.te

SpringBoot+SpringSecurity之如何forword到登入頁面

當我們在專案中引入了SpringSecurity框架進行身份校驗的時候,如果某個請求需要使用者身份認證,那麼SpringSecurity會將使用者redirect到登入頁面。但是有些時候我們希望是forward到登入頁面而不是redirect到登入頁面,這種情況下可做如下配置: @Bean publi

day023正則表示式,re模組,簡單爬蟲和多頁面爬蟲(幹掉數字簽名證書驗證)

本節內容: 1、正則表示式 2、re模組的運用 3、簡單的爬蟲練習 一、正則表示式(Regular Expression) 正則表示式是對字串操作的⼀種邏輯公式. 我們⼀般使⽤正則表示式對字串進⾏匹配和過濾. 使⽤正則的優缺點: 優點: 靈活, 功能性強, 邏輯性強. 缺點: 上⼿難. ⼀旦上⼿, 會愛

爬蟲學習-獲取頁面使用的字符集

前面做爬蟲例子的時候列印有時會出現意外的亂碼,後來通過查詢發現是解碼字符集引起的,所以需要實現知道頁面使用的字符集才能更好的解碼 #encoding=utf-8 #匯入需要的包 字符集需要的包是chardet import requests import chardet if __nam

路由器登入頁面------提交資料的保護

今天無意中發現路由器的登入頁面在提交過程中用JS對提交的資料做過加密,但加密演算法好像是用雜湊演算法的原理,但不知具體的原理裡是什麼,望有路過的人們指點指點。   以下是頁面程式碼:   <html> <head> <title>