解決ajax非同步渲染頁面防止反爬蟲

2021-10-04 19:37:00 字數 2224 閱讀 7142

1.scrapy在爬取過程中遇到ajax渲染的頁面,只爬取到了js**,爬不到真實的頁面內容。

解決方法:(前提:可以獲取到這些鏈結)

第一,如果鏈結的處理方式不可以統一,建立網域名稱與爬取策略的聯絡,通過特定的js請求的目標url獲取到json資料進行爬取;(缺點:無法做到完全窮盡,效率低)

第二,如果鏈結的處理方式可以統一,可以寫乙個統一的反爬蟲程式,將讀取檔案統一處理

第三,統一開啟瀏覽器,待爬蟲全部結束再關閉瀏覽器,對ajax和非ajax統一處理

(缺點:速度太慢)

爬取動態頁面目前來說有兩種方法:

1)分析頁面請求(無法做歸類,只適合特定網頁)

2)selenium模擬瀏覽器行為(在爬蟲過程開啟瀏覽器,爬蟲結束關閉瀏覽器)

3)最新的scrapy已經自帶處理「 ajax可抓取頁面」的爬網中介軟體(看官方文件的重要性!!!!)

1.對於特定的網頁,通過特定的js請求的目標url獲取到json資料進行爬取;

2.通過判斷內容中是否含有對應的vue、angular、react框架設計:

1)獲取到爬取非同步渲染頁面的鏈結(通過區分出三大框架各自的特點儲存鏈結)

存在難點:怎麼通過內容去反向拿到鏈結?

2)通過獲取的鏈結進行非同步獲取內容

1.安裝selenium庫

chrome://version

3.在scrapy整合selenium

1)在spider主程式初始init函式增加:

#啟動webdriver

self.browser = webdriver.chrome(executable_path=

)self.browser.set_page_load_timeout(30)

#執行結束後,關閉webdriver

defclosed

(self,spider)

:print

("spider closed"

) self.browser.close(

)

2)設定selenium中介軟體

#設定selenium中介軟體

class

seleniummiddleware

(object):

defprocess_request

(self, request, spider)

:if spider.name ==

'getcontent'

:try

: spider.browser.get(request.url)

spider.browser.execute_script(

'window.scrollto(0, document.body.scrollheight)'

)except timeoutexception as e:

print

('超時'

) spider.browser.execute_script(

'window.stop()'

) time.sleep(2)

return htmlresponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding=

"utf-8"

, request=request)

3)setting檔案

#新增seleniummiddleware中介軟體

'web_content.middlewares.seleniummiddleware'

:544

,

3.啟動scrapy的多個爬蟲方法:1)開啟多個命令列,分別執行scrapy crawl ***

2)編寫乙個指令碼

3)使用scrapyd,部署爬蟲,通過scrapyd的api呼叫爬蟲

ajax之非同步渲染

檢視函式展示所有老師 defshow t request data models.teacher.objects.all return render request,san five.html locals 檢視函式 用來渲染學生 defshow s request,id data models.t...

AJAX防止頁面快取

採用ajax技術的時候 通常我們無重新整理頁面提交資料後 用同樣的url去獲取資料的時候會發現是以前的資料 那樣就給client端帶來假象了 採用以下的方法可以取消快取 htm網頁 或者asp網頁 response.expires 1 response.expiresabsolute now 1 r...

ajax同步與非同步 非同步與頁面重新整理

此時遇到乙個問題,例如資產房間進行了增刪改,對應的快取也是要進行同步重新整理的,不然其他地方獲取的仍然是之前的資料。最開始考慮到的是在執行增刪改的介面返回success時呼叫對應的快取重新整理封裝方法。圖中紅色圈起來的部分,則是執行重新整理方法,但是測驗發現,當前insert成功了,但是上面三個方法...