當前位置:首頁 » 文件傳輸 » 通過爬蟲實現模擬瀏覽器訪問功能
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

通過爬蟲實現模擬瀏覽器訪問功能

發布時間: 2022-05-18 19:51:20

⑴ Java網路爬蟲怎麼實現

網路爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。
傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。對於垂直搜索來說,聚焦爬蟲,即有針對性地爬取特定主題網頁的爬蟲,更為適合。

以下是一個使用java實現的簡單爬蟲核心代碼:
public void crawl() throws Throwable {
while (continueCrawling()) {
CrawlerUrl url = getNextUrl(); //獲取待爬取隊列中的下一個URL
if (url != null) {
printCrawlInfo();
String content = getContent(url); //獲取URL的文本信息

//聚焦爬蟲只爬取與主題內容相關的網頁,這里採用正則匹配簡單處理
if (isContentRelevant(content, this.regexpSearchPattern)) {
saveContent(url, content); //保存網頁至本地

//獲取網頁內容中的鏈接,並放入待爬取隊列中
Collection urlStrings = extractUrls(content, url);
addUrlsToUrlQueue(url, urlStrings);
} else {
System.out.println(url + " is not relevant ignoring ...");
}

//延時防止被對方屏蔽
Thread.sleep(this.delayBetweenUrls);
}
}
closeOutputStream();
}
private CrawlerUrl getNextUrl() throws Throwable {
CrawlerUrl nextUrl = null;
while ((nextUrl == null) && (!urlQueue.isEmpty())) {
CrawlerUrl crawlerUrl = this.urlQueue.remove();
//doWeHavePermissionToVisit:是否有許可權訪問該URL,友好的爬蟲會根據網站提供的"Robot.txt"中配置的規則進行爬取
//isUrlAlreadyVisited:URL是否訪問過,大型的搜索引擎往往採用BloomFilter進行排重,這里簡單使用HashMap
//isDepthAcceptable:是否達到指定的深度上限。爬蟲一般採取廣度優先的方式。一些網站會構建爬蟲陷阱(自動生成一些無效鏈接使爬蟲陷入死循環),採用深度限制加以避免
if (doWeHavePermissionToVisit(crawlerUrl)
&& (!isUrlAlreadyVisited(crawlerUrl))
&& isDepthAcceptable(crawlerUrl)) {
nextUrl = crawlerUrl;
// System.out.println("Next url to be visited is " + nextUrl);
}
}
return nextUrl;
}
private String getContent(CrawlerUrl url) throws Throwable {
//HttpClient4.1的調用與之前的方式不同
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url.getUrlString());
StringBuffer strBuf = new StringBuffer();
HttpResponse response = client.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent(), "UTF-8"));
String line = null;
if (entity.getContentLength() > 0) {
strBuf = new StringBuffer((int) entity.getContentLength());
while ((line = reader.readLine()) != null) {
strBuf.append(line);
}
}
}
if (entity != null) {
nsumeContent();
}
}
//將url標記為已訪問
markUrlAsVisited(url);
return strBuf.toString();
}
public static boolean isContentRelevant(String content,
Pattern regexpPattern) {
boolean retValue = false;
if (content != null) {
//是否符合正則表達式的條件
Matcher m = regexpPattern.matcher(content.toLowerCase());
retValue = m.find();
}
return retValue;
}
public List extractUrls(String text, CrawlerUrl crawlerUrl) {
Map urlMap = new HashMap();
extractHttpUrls(urlMap, text);
extractRelativeUrls(urlMap, text, crawlerUrl);
return new ArrayList(urlMap.keySet());
}
private void extractHttpUrls(Map urlMap, String text) {
Matcher m = (text);
while (m.find()) {
String url = m.group();
String[] terms = url.split("a href=\"");
for (String term : terms) {
// System.out.println("Term = " + term);
if (term.startsWith("http")) {
int index = term.indexOf("\"");
if (index > 0) {
term = term.substring(0, index);
}
urlMap.put(term, term);
System.out.println("Hyperlink: " + term);
}
}
}
}
private void extractRelativeUrls(Map urlMap, String text,
CrawlerUrl crawlerUrl) {
Matcher m = relativeRegexp.matcher(text);
URL textURL = crawlerUrl.getURL();
String host = textURL.getHost();
while (m.find()) {
String url = m.group();
String[] terms = url.split("a href=\"");
for (String term : terms) {
if (term.startsWith("/")) {
int index = term.indexOf("\"");
if (index > 0) {
term = term.substring(0, index);
}
String s = //" + host + term;
urlMap.put(s, s);
System.out.println("Relative url: " + s);
}
}
}

}
public static void main(String[] args) {
try {
String url = "";
Queue urlQueue = new LinkedList();
String regexp = "java";
urlQueue.add(new CrawlerUrl(url, 0));
NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L,
regexp);
// boolean allowCrawl = crawler.areWeAllowedToVisit(url);
// System.out.println("Allowed to crawl: " + url + " " +
// allowCrawl);
crawler.crawl();
} catch (Throwable t) {
System.out.println(t.toString());
t.printStackTrace();
}
}

⑵ 如何用Python爬蟲抓取網頁內容

爬蟲流程
其實把網路爬蟲抽象開來看,它無外乎包含如下幾個步驟
模擬請求網頁。模擬瀏覽器,打開目標網站。
獲取數據。打開網站之後,就可以自動化的獲取我們所需要的網站數據。
保存數據。拿到數據之後,需要持久化到本地文件或者資料庫存儲設備中。
那麼我們該如何使用 Python 來編寫自己的爬蟲程序呢,在這里我要重點介紹一個 Python 庫:Requests。
Requests 使用
Requests 庫是 Python 中發起 HTTP 請求的庫,使用非常方便簡單。
模擬發送 HTTP 請求
發送 GET 請求
當我們用瀏覽器打開豆瓣首頁時,其實發送的最原始的請求就是 GET 請求
import requests
res = requests.get('http://www.douban.com')
print(res)
print(type(res))
>>>
<Response [200]>
<class 'requests.models.Response'>

⑶ 怎樣用Python設計一個爬蟲模擬登陸知乎

先來說一下,爬蟲模擬登陸的基本原理吧,我也是剛開始接觸對於一些深層次的東西也不是掌握的很清楚。首先比較重要的一個概念就是cookie,我們都知道HTTP是一種無狀態的協議,也就是說當一個瀏覽器客戶端向伺服器提交一個request,伺服器回應一個response後,他們之間的聯系就中斷了。這樣就導致了這個客戶端在向伺服器發送請求時,伺服器無法判別這兩個客戶端是不是一個了。這樣肯定是不行的。這時cookie的作用就體現出來了。當客戶端向伺服器發送一個請求後,伺服器會給它分配一個標識(cookie),並保存到客戶端本地,當下次該客戶端再次發送請求時連帶著cookie一並發送給伺服器,伺服器一看到cookie,啊原來是你呀,這是你的東西,拿走吧。所以一個爬蟲模擬登陸就是要要做到模擬一個瀏覽器客戶端的行為,首先將你的基本登錄信息發送給指定的url,伺服器驗證成功後會返回一個cookie,我們就利用這個cookie進行後續的爬取工作就行了。
我這里抓包用的就是chrome的開發者工具,不過你也可以使用Fiddler、Firebug等都可以,只不過作為一名前端er對chrome有一種特殊的喜愛之情。准備好工具接下來就要打開知乎的登陸頁面並查看https://www.hu.com/#signin 我們可以很容易發現這個請求 發送的就是登錄信息,當然我使用手機登陸的 用郵件登陸的是最後結尾是email

所以我們只需要向這個地址post數據就行了

phone_num 登錄名
password 密碼
captcha_type 驗證碼類型(這個參數著這里並沒有實質作用)
rember_me 記住密碼
_xsrf 一個隱藏的表單元素 知乎用來防禦CSRF的(關於CSRF請打開這里) 我發現這個值是固定所以就在這里直接寫死了 若果有興趣的同學可以寫一個正則表達式 把這部分的值提取出來 這樣更嚴謹一些。

# -*- coding:utf-8 -*-
import urllib2
import urllib
import cookielib
posturl = 'https://www.hu.com/login/phone_num'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/52.0.2743.116 Safari/537.36',
'Referer':'https://www.hu.com/'
}
value = {
'password':'*****************',
'remember_me':True,
'phone_num':'*******************',
'_xsrf':'**********************'
}
data=urllib.urlencode(value)
#初始化一個CookieJar來處理Cookie
cookieJar=cookielib.CookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cookieJar)
#實例化一個全局opener
opener=urllib2.build_opener(cookie_support)
request = urllib2.Request(posturl, data, headers)
result=opener.open(request)
print result.read()

當你看到伺服器返回這個信息的時候就說明你登陸成功了
{"r":0,
"msg": "\u767b\u5f55\u6210\u529f"
}
#翻譯過來就是 「登陸成功」 四個大字
然後你就可以用這個身份去抓取知乎上的頁面了
page=opener.open("https://www.hu.com/people/yu-yi-56-70")
content = page.read().decode('utf-8')
print(content)

這段代碼 就是通過實例化一個opener對象保存成功登陸後的cookie信息,然後再通過這個opener帶著這個cookie去訪問伺服器上關於這個身份的完整頁面。

⑷ 如何實現pyhton模擬打開瀏覽器,然後實現打開特定網頁,再模擬點擊該網頁的button

如果是winform 程序可以使用如下方法:Process.Start("iexplore.exe", "http://網址"); // 使用ie找開網址Process.Start("http://網址"); // 使用本機默認瀏覽器打開網址

⑸ 如何使用python進行瀏覽器行為模擬

你可以使用python的webbrowser庫來模擬瀏覽器:

url=''

#OpenURLinanewtab,ifabrowserwindowisalreadyopen.
webbrowser.open_new_tab(url+'doc/')

#OpenURLinnewwindow,raisingthewindowifpossible.
webbrowser.open_new(url)

或者使用python的第三方庫, selenium

fromseleniumimportwebdriver
fromselenium.webdriver.common.keysimportKeys

browser=webdriver.Firefox()

browser.get('
)
assert'Yahoo!'inbrowser.title

elem=browser.find_element_by_name('p')#Findthesearchbox
elem.send_keys('seleniumhq'+Keys.RETURN)

browser.quit()

如果解決了您的問題請採納!
如果未解決請繼續追問!

⑹ 如何將爬蟲完全偽裝成為用戶在瀏覽器的點擊行為

1.偽裝http header,我們可以使用phanomjs的API來實現:

派生到我的代碼片
1. <span style="font-family:SimSun;font-size:18px;">page.customHeaders = {
2. "Referer" : referrer,
3. "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER 1.1"
4. };</span>

2.偽造referer欺騙js,這一點其實就要麻煩一些:我們需要首先打開referer頁面,然後再模擬點擊消息轉到目的網站,具體方法如下:

1. <span style="font-family:SimSun;font-size:18px;">page.onLoadFinished = function(status){
2.
3. // Only once do
4. if ( page.firstLoad ) {
5. page.firstLoad = false;
6. // Inject and Click a Link to our target
7. page.evaluate(function (href) {
8. // Create and append the link
9. var link = document.createElement('a');
10. link.setAttribute('href', href);
11. document.body.appendChild(link);
12.
13. // Dispatch Click Event on the link
14. var evt = document.createEvent('MouseEvents');
15. evt.initMouseEvent('click', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, link);
16. link.dispatchEvent(evt);
17. }, targetUrl);
18. } else {
19. // 此處我們已經成功偽造referer信息,並且打開Target url頁面
20. console.log(targetUrl+"\t"+page.url);
21.
22. };
23. };</span>
3.偽造User Agent欺騙js,這一點其實就要麻煩一些,但是我們也可以通過phantomjs的API來實現:
在CODE上查看代碼片
1. <span style="font-family:SimSun;font-size:18px;">page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER";</span>

4. 使用代理,這個phantomjs支持的就更好啦,調用的時候加入代理的參數即可:
派生到我的代碼片
1. <span style="font-family:SimSun;font-size:18px;">phantomjs --proxy=ip:port</span>

5.添加cookies(我知道phantomjs設置cookies可行,目前還沒有驗證,據稱有以下三種方法):

page.customHeaders = {Cookie: xxx}
phantom.addCookie({
'name': 'yandexuid',
'value': '21611441383258191',
'domain': '.yandex.ru'))
});
phantomjs --cookies-file=cookies.txt

說到這里其實我們已經得到了一個動態的爬蟲,它可以之行js代碼,可以抓取到網頁的動態內容,具有瀏覽器的header並且無法被js、ajax、java、php代碼識別,甚至也無法被後台的日誌分析識別。目前為止該方法的qps並不高,因為載入js和phantomjs並發性能不高。
其實這個爬蟲有很多的用處:
1.偽造點擊信息,最近CNZZ公布了中小網站的流量來源中30%是來自奇虎360的,眾所周知CNZZ是植入js代碼統計網站的訪問量和來源的。這些完全可以用我們的代碼偽造訪問量,並且偽造訪問來源呀。
2. 爬取網站動態內容,有很多網站是基於ajax和js設計的,現在我們就可以爬取到這些代碼執行得到的數據。
3.逃避反爬蟲策略,這個就太明顯了。

⑺ python爬蟲能幹什麼

python爬蟲就是模擬瀏覽器打開網頁,獲取網頁中想要的那部分數據。利用爬蟲我們可以抓取商品信息、評論及銷量數據;可以抓取房產買賣及租售信息;可以抓取各類職位信息等。

爬蟲:

網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。

(推薦教程:Python入門教程)

通俗的講就是通過程序去獲取web頁面上自己想要的數據,也就是自動抓取數據。

python爬蟲能做什麼?

從技術層面來說就是通過程序模擬瀏覽器請求站點的行為,把站點返回的HTML代碼/JSON數據/二進制數據(圖片、視頻) 爬到本地,進而提取自己需要的數據存放起來使用。

利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:

爬取知乎優質答案,為你篩選出各話題下最優質的內容。

抓取淘寶、京東商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。

抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。

爬取各類職位信息,分析各行業人才需求情況及薪資水平。

爬蟲的本質:

爬蟲的本質就是模擬瀏覽器打開網頁,獲取網頁中我們想要的那部分數據。

⑻ python爬蟲模擬登錄是什麼意思

有些網站需要登錄後才能爬取所需要的信息,此時可以設計爬蟲進行模擬登錄,原理是利用瀏覽器cookie。

一、瀏覽器訪問伺服器的過程:
(1)瀏覽器(客戶端)向Web伺服器發出一個HTTP請求(Http request);
(2)Web伺服器收到請求,發回響應信息(Http Response);
(3)瀏覽器解析內容呈現給用戶。

二、利用Fiddler查看瀏覽器行為信息:

Http請求消息:

(1)起始行:包括請求方法、請求的資源、HTTP協議的版本號

這里GET請求沒有消息主體,因此消息頭後的空白行中沒有其他數據。

(2)消息頭:包含各種屬性

(3)消息頭結束後的空白行

(4)可選的消息體:包含數據

Http響應消息:

(1)起始行:包括HTTP協議版本,http狀態碼和狀態

(2)消息頭:包含各種屬性

(3)消息體:包含數據


可以發現,信息里不僅有帳號(email)和密碼(password),其實還有_xsrf(具體作用往後看)和remember_me(登錄界面的「記住我」)兩個值。

那麼,在python爬蟲中將這些信息同樣發送,就可以模擬登錄。

在發送的信息里出現了一個項:_xsrf,值為

這個項其實是在訪問知乎登錄網頁https://www.hu.com/#signin時,網頁發送過來的信息,在瀏覽器源碼中可見:

所以需要先從登錄網址https://www.hu.com/#signin獲取這個_xsrf的值,

並連同帳號、密碼等信息再POST到真正接收請求的http://www.hu.com/login/email網址。

(2)獲取_xsrf的值:
爬取登錄網址https://www.hu.com/#signin,從內容中獲取_xsrf的值。
正則表達式。

(3)發送請求:
xsrf = 獲取的_xsrf的值
data = {"email":"xxx","password":"xxx","_xsrf":xsrf}
login = s.post(loginURL, data = data, headers = headers)
loginURL:是真正POST到的網址,不一定等同於登錄頁面的網址;

(4)爬取登錄後的網頁:
response = s.get(getURL, cookies = login.cookies, headers = headers)
getURL:要爬取的登陸後的網頁;
login.cookies:登陸時獲取的cookie信息,存儲在login中。

(5)輸出內容:
print response.content

五、具體代碼:

[python]view plain

  • #-*-coding:utf-8-*-

  • #author:Simon

  • #updatetime:2016年3月17日17:35:35

  • #功能:爬蟲之模擬登錄,urllib和requests都用了...

  • importurllib

  • importurllib2

  • importrequests

  • importre

  • headers={'User-Agent':'Mozilla/5.0(WindowsNT6.2)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.12Safari/535.11'}

  • defget_xsrf():

  • firstURL="http://www.hu.com/#signin"

  • request=urllib2.Request(firstURL,headers=headers)

  • response=urllib2.urlopen(request)

  • content=response.read()

  • pattern=re.compile(r'name="_xsrf"value="(.*?)"/>',re.S)

  • _xsrf=re.findall(pattern,content)

  • return_xsrf[0]

  • deflogin(par1):

  • s=requests.session()

  • afterURL="https://www.hu.com/explore"#想要爬取的登錄後的頁面

  • loginURL="http://www.hu.com/login/email"#POST發送到的網址

  • login=s.post(loginURL,data=par1,headers=headers)#發送登錄信息,返回響應信息(包含cookie)

  • response=s.get(afterURL,cookies=login.cookies,headers=headers)#獲得登陸後的響應信息,使用之前的cookie

  • returnresponse.content

  • xsrf=get_xsrf()

  • print"_xsrf的值是:"+xsrf

  • data={"email":"xxx","password":"xxx","_xsrf":xsrf}

  • printlogin(data)

  • 六、補充:

    用知乎網做完試驗,發現這里好像並不需要發送_xsrf這個值。

    不過有的網站在登陸時確實需要發送類似這樣的一個值,可以用上述方法。

⑼ 爬蟲都可以干什麼

python是一種計算機的編程語言,是這么多計算機編程語言中比較容易學的一種,而且應用也廣,這python爬蟲是什麼意思呢?和IPIDEA全球http去了解一下python爬蟲的一些基礎知識。

一、python爬蟲是什麼意思

爬蟲:是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。

即:打開一個網頁,有個工具,可以把網頁上的內容獲取下來,存到你想要的地方,這個工具就是爬蟲。

Python爬蟲架構組成:

1.網頁解析器,將一個網頁字元串進行解析,可以按照我們的要求來提取出我們有用的信息,也可以根據DOM樹的解析方式來解析。

2.URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重復抓取URL和循環抓取URL,實現URL管理器主要用三種方式,通過內存、資料庫、緩存資料庫來實現。

3.網頁下載器:通過傳入一個URL地址來下載網頁,將網頁轉換成一個字元串,網頁下載器有urllib2(Python官方基礎模塊)包括需要登錄、代理、和cookie,requests(第三方包)

4.調度器:相當於一台電腦的CPU,主要負責調度URL管理器、下載器、解析器之間的協調工作。

5.應用程序:就是從網頁中提取的有用數據組成的一個應用。

二、爬蟲怎麼抓取數據

1.抓取網頁

抓取網頁有時候需要模擬瀏覽器的行為,很多網站對於生硬的爬蟲抓取都是封殺的。這是我們需要模擬user agent的行為構造合適的請求,比如模擬用戶登陸、模擬session/cookie的存儲和設置。

2.抓取後處理

抓取的網頁通常需要處理,比如過濾html標簽,提取文本等。python的beautifulsoap提供了簡潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。

其實以上功能很多語言和工具都能做,但是用python能夠幹得最快,最干凈。上文介紹了python爬蟲的一些基礎知識,相信大家對於「python爬蟲是什麼意思」與「爬蟲怎麼抓取數據」有一定的的認識了。現在大數據時代,很多學python的時候都是以爬蟲入手,學習網路爬蟲的人越來越多。通常使用爬蟲抓取數據都會遇到IP限制問題,使用高匿代理,可以突破IP限制,幫助爬蟲突破網站限制次數。

⑽ Python爬蟲模擬登陸

你首先要了解登錄的過程是什麼
先要利用頭來模擬偽裝成瀏覽器訪問網站
post是把數據發送給網站後台,get就相反(一般是這種情況)
把post的數據也做成一樣的樣式
訪問網站,如果是200,則表示成功了

最後你可以使用bs4之類的,根據正則匹配獲取相關的數據或者下載保存到本地