700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python 头条号_python爬取今日头条收藏目录

python 头条号_python爬取今日头条收藏目录

时间:2024-04-26 22:46:39

相关推荐

python 头条号_python爬取今日头条收藏目录

今日头条收藏以异步加载方式加载,可用以下两种方式分析,达到以下效果:

第一种:

将收藏网页拉直最底部,直到不产生新的收藏信息,将网页下载,另存到本地,形成新的htm文件,这时可以用分析静态网页的方式进行分析,得到标题和对应网址,在此不赘述。

第二种:

用火狐打开今日头条收藏,点击F12,点击网络,点击xhr,下拉收藏页,得到数条反馈网址,在新的页面打开网址,观察页面内容(也可在每条反馈的响应行观察),发现需求"display_url"网址和"title"标题,每页总共20条,此页既是所求网页,现在需要构建所有此类网页。

比较每条xhr反馈网址,发现max_repin_time值不同,将max_repin_time代入网址搜寻,发现最后一条max_repin_time对应值是下一次出现的max_repin_time值,获取所欲max_repin_time值,代码如下:

import requests

from bs4 import BeautifulSoup

import json

import openpyxl

#第一个max_repin_time

a=0

x=[]

#大约有不到2000条,每页有20个,重复100次

for i in range(100):

url = r'/c/user/favourite/?page_type=2&user_id=xxxxxxxxxx&max_behot_time=0&count=20&as=A1F5FC067BC947F&cp=5C6B499417AF2E1&_signature=-FH0WhAfpEQU9Js8GPimBPhR9E&max_repin_time='+str(a)

#加入模拟头,访问服务器,获得回复

headers={"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Encoding":"gzip, deflate, br",

"Content-Type":"application/x-www-form-urlencoded",

"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/0101 Firefox/44.0",

"Connection": "keep-alive",

"Host":"",

"Cookie":"tt_webid=6658195549126936078; WEATHER_CITY=%E5%8C%97%E4%BA%AC; UM_distinctid=168f1069f78587-0e77483fb7ddb8-4c342673-1fa400-168f1069f7a974; CNZZDATA1259612802=1044653168-1550229856-https%253A%252F%%252F%7C1550552081; tt_webid=6658195549126936078; csrftoken=93dcf7b6a041b251a15178785732693f; sso_uid_tt=137bd92d04992761ee6d4709ae22339c; toutiao_sso_user=ebfb7f764fbdc5d556227c0a40c569b3; login_flag=d012933c19ad2e79a404686435b187d4; sessionid=4fe9ce3afff7f60ad20efc166b261d96; uid_tt=fa868ce5017740855bd9c92f19038ebe; sid_tt=4fe9ce3afff7f60ad20efc166b261d96; sid_guard=4fe9ce3afff7f60ad20efc166b261d96|1550497976|15552000|Sat\054 17-Aug- 13:52:56 GMT",

"X-Requested-With":"XMLHttpRequest"}

#加入头信息

response = requests.get(url, headers=headers)

#解析回复,此时格式为bs4.BeautifulSoup,不可分析

soup = BeautifulSoup(response.content, 'html.parser')

#将解析后内容转为字符后再转json格式,就可作为字典分析

t = json.loads(str(soup))

#获得键为"max_repin_time"的对应值

b =t["max_repin_time"]

#添加到列表中

x.append(b)

#为了了解任务进行到哪一步

print(b)

#重新开始循环得到新的max_repin_time

a=b

x.append('0')

得到max_repin_time值得列表x,再要得到"display_url"网址和"title"标题,代码如下:

y=[]

t=[]

for i in range(len(x)):

1

url1 = r'/c/user/favourite/?page_type=2&user_id=xxxxxxxxxx&max_behot_time=0&count=20&as=A1F5FC067BC947F&cp=5C6B499417AF2E1&_signature=-FH0WhAfpEQU9Js8GPimBPhR9E&max_repin_time='+str(x[i])

#加入模拟头,访问服务器,获得回复

headers={"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Encoding":"gzip, deflate, br",

"Content-Type":"application/x-www-form-urlencoded",

"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/0101 Firefox/44.0",

"Connection": "keep-alive",

"Host":"",

"Cookie":"tt_webid=6658195549126936078; WEATHER_CITY=%E5%8C%97%E4%BA%AC; UM_distinctid=168f1069f78587-0e77483fb7ddb8-4c342673-1fa400-168f1069f7a974; CNZZDATA1259612802=1044653168-1550229856-https%253A%252F%%252F%7C1550552081; tt_webid=6658195549126936078; csrftoken=93dcf7b6a041b251a15178785732693f; sso_uid_tt=137bd92d04992761ee6d4709ae22339c; toutiao_sso_user=ebfb7f764fbdc5d556227c0a40c569b3; login_flag=d012933c19ad2e79a404686435b187d4; sessionid=4fe9ce3afff7f60ad20efc166b261d96; uid_tt=fa868ce5017740855bd9c92f19038ebe; sid_tt=4fe9ce3afff7f60ad20efc166b261d96; sid_guard=4fe9ce3afff7f60ad20efc166b261d96|1550497976|15552000|Sat\054 17-Aug- 13:52:56 GMT",

"X-Requested-With":"XMLHttpRequest"}

response = requests.get(url1, headers=headers)

#解析回复,此时格式为bs4.BeautifulSoup,不可分析

soup = BeautifulSoup(response.content, 'html.parser')

s = json.loads(str(soup))

print(len(s.get('data')))

for b in range(len(s.get('data'))):

#标题

t.append(s.get('data')[b].get('title'))

#网址

y.append(s.get('data')[b].get('display_url'))

得到"display_url"网址和"title"标题,导入excel,代码如下:

wb = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\zx.xlsx')

for i in range(1,len(y)+1):

wb['Sheet1'].cell(i,1).value=t[i-1]

wb['Sheet1'].cell(i,2).value=y[i-1]

wb.save(r'C:\Users\Administrator\Desktop\zx1.xlsx')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。