python爬虫爬取抖音视频的翻页问题如何解决?

新手上路,请多包涵

各位大佬,求助。最近想尝试利用python爬虫,爬取某一抖音博主的全部视频。
但是在爬取过程中遇到了一个问题,即翻页问题。
在抖音中,最初打开抖音博主的主页时,会自动加载20个左右的视频及其链接。当鼠标滑到页面末尾的时候,会自动加载后续的视频内容。整个过程没有翻页的相关按钮,是自动完成的后续内容加载。
但是在爬取的过程中,只会获取到最初的20个视频的链接,想请问,如何通过程序,自动完成“翻页”并加载该抖音博主的全部视频链接?
以下附我的代码,希望各位大佬指点。

import requests
from bs4 import BeautifulSoup

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    'cookie': 'douyin.com',
    'sec-ch-ua': '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',

}

def get_share_url(url):
    try:
        r = requests.get(url=url, headers=headers, allow_redirects=False)
        return r.headers['location']
    except Exception as e:
        print("解析失败")
        print(e)


def get_video_url(url):
    if not url:
        return
    try:
        url_new = 'https://www.douyin.com/user/MS4wLjABAAAAp3rtDfotN7-mHjDIr0XR2XJ5g0C1DIVAuJYgBHJYX-xJLZgoHvfN0r0yAWTLybn7'
        r = requests.get(url=url_new, headers=headers)
        html = BeautifulSoup(r.text, 'html.parser')
        result = html.find_all('a', 'B3AsdZT9 chmb2GX8 UwG3qaZV')
        for item in result:
            get_video(item['href'])
    except Exception as e:
        print("解析失败")
        print(e)


def get_video(video_url):
    vid = video_url[-19:]
    print(vid)
    xhr_url = f'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={vid}'
    r = requests.get(url=xhr_url, headers=headers).json()
    video_url_a = r['item_list'][0]['video']['play_addr']['url_list'][0]
    return



if __name__ == "__main__":
    # 抖音APP分享的短链接
    url = 'https://v.douyin.com/2Qj3mHB/'
    share_url = get_share_url(url)
    video_url = get_video_url(share_url)
    print("Finished")

运行结果如下:

6980593719770680583
6991623262421732645
6982747467158687012
7122118979715386639
7122012417067945216
7110354925598559488
7095343365453090089
7081217800802405632
7064352556000038178
7054563255129296168
7047288931666119951
7045083352319134976
7039272094689070376
7038262801579642112
7034134213125213474
7025548403216059663
7023583223586229504
7021062565593763087
7016236019557092616
7011905311443275015
7010997973106674952
6996280723158207774
Finished

运行结果输出的是该博主前22个视频的id。而后面的十来个视频的id则没有加载。

阅读 3.6k
1 个回答

翻页方式:

  • page, 示例: https://segmentfault.com/u/ponponon/articles
  • max_id, 示例: https://segmentfault.com/questions/subscribed

你说的是后者


page index 翻页方式:
图片.png

max_id 翻页方式:
图片.png

用最大最小id、或者最新最旧时间来获取下一页内容

比如 segmentfault 的问答页用的就是 『最新时间』 来做偏移量(就是那个 offset=1658568925246)

图片.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题