爬取雪球網的新聞數據


以下將從處理cookie的兩種方式來分析爬取雪球網的新聞數據,

一個是手動處理cookie,到源碼去抓包,找到他的request header里面的cookie,復制出來封裝到headers內;

另一個是自動處理cookie,引入模塊requests的session,這個方法和requests一樣可以發送get和post請求,但是他在發送請求的時候自動攜帶cookie

那么什么情況下我們爬取數據需要用到cookie呢?

首先我們要知道cookie他是服務器記錄客戶端的一種狀態,有一些網站的爬取,需要先通過驗證信息才可以進去主頁面,如果我們在爬取大量數據的情況下,可能需要反復登錄才可以爬取,這樣效率不高,下面通過簡單分析爬取雪球網的新聞標題來區分兩種爬取的異同

 

我們先分析網站是不是ajax動態獲取數據,通過xhr我們看到每次向下拉,xhr總是有新的數據顯示,說明該網站是ajax動態獲取數據的

 

 

 並且我們從response看出數據是以json數據存在的

 

 分析完網站的基本情況之后,我們先按照之前的通用爬蟲去爬取數據

import requests

url="https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20369998&count=15&category=-1"
headers ={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
page_json  = requests.get(url=url,headers=headers).json()
print(page_json)

  輸出結果為:

{'error_description': '遇到錯誤,請刷新頁面或者重新登錄帳號后再試', 'error_uri': '/v4/statuses/public_timeline_by_category.json', 'error_data': None, 'error_code': '400016'}

  出現上面的這種原因是因為cookie的反爬機制

 

手動處理cookie

import requests

url="https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20369998&count=15&category=-1"
headers ={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
          "Cookie": "aliyungf_tc=AQAAADriOUCilQoAxZ5btPQfYv7152ox; acw_tc=2760824915856669537353368e2ea5d4c1b87e45dadece330ae07e755b96f1; xq_a_token=2ee68b782d6ac072e2a24d81406dd950aacaebe3; xqat=2ee68b782d6ac072e2a24d81406dd950aacaebe3; xq_r_token=f9a2c4e43ce1340d624c8b28e3634941c48f1052; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTU4NzUyMjY2MSwiY3RtIjoxNTg1NjY2OTA4NDgwLCJjaWQiOiJkOWQwbjRBWnVwIn0.YCQ_yUlzhRvTiUgz1BWWDFrsmlxSgsbaaKs0cxsdxnOaMhIjF0qUX-5WNeqfRXe15I5cPHiFf-5AzeRZgjy0_bSId2-jycpDWuSIseOY07nHM306A8Y1vSJJx4Q9gFnWx4ETpbdu1VXyMYKpwVIKfmSb5sbGZYyHDJPQQuNTfIAtPBiIeHWPDRB-wtf0qa5FNSMK3LKHRZooXjUgh-IAFtQihUIr9D81tligmjNYREntMY1gLg5Kq6GjgivfF9CFc11sJ11fZxnSw9e8J_Lmx8XXxhwHv-j4-ANUSIuglM4cT6yCsWa3pGAVMN18r2cV72JNkk343I05DevQkbX8_A; u=481585666954081; Hm_lvt_1db88642e346389874251b5a1eded6e3=1585666971; device_id=24700f9f1986800ab4fcc880530dd0ed; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1585667033"}
page_json  = requests.get(url=url,headers=headers).json()
print(page_json)
手動處理cookies爬取雪球網

自動處理cookie

import requests
from lxml import etree
session = requests.Session()

url="https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20369998&count=15&category=-1"
headers ={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}

# 第一步,向雪球網首頁發送一條請求,獲取cookie
session.get(url="https://xueqiu.com",headers=headers)
# 第二步,獲取動態加載的新聞數據
page_json = session.get(url=url,headers=headers).json()
print(page_json)
自動處理cookie爬取雪球網

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM