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'https://www.toutiao.com/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/20100101 Firefox/44.0",
                        "Connection": "keep-alive",
                        "Host":"www.toutiao.com",
                        "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%252Fwww.baidu.com%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-2019 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'https://www.toutiao.com/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/20100101 Firefox/44.0",
                        "Connection": "keep-alive",
                        "Host":"www.toutiao.com",
                        "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%252Fwww.baidu.com%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-2019 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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值