其他分享
首页 > 其他分享> > 爬取雪球网的新闻数据

爬取雪球网的新闻数据

作者:互联网

以下将从处理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爬取雪球网

 

标签:url,新闻,取雪,id,headers,json,cookie,球网,requests
来源: https://www.cnblogs.com/groundcontrol/p/12613871.html