欢迎光临散文网 会员登陆 & 注册

Python爬虫过程中遇到微博since_id怎样处理

2021-02-26 11:32 作者:呆唯真可爱O_O  | 我要投稿

    在崔庆才《网络爬虫开发实战》第6.3小节中,举出Ajax数据爬取的一个实例,即使用Python爬取微博数据。但著书时间相对较早,原本的请求URL中用‘page’就可以实现翻页,如今却是使用‘since_id’。

原本URL末尾是page(1,2,3....)不是since_id

    但在仔细观察后我们便可发现,since_id的值在第一页为‘’,也就是没有,而下一页的since_id,是可以在上一页的 预览--data--cardlistinfo 中找到的。意思是,上一页微博浏览到这一条,下一页微博从这一条开始。

    当时的我挺懵逼的,这必得要 get_since_id 啊,可你也得先 get_page 啊,可你不知道since_id 怎么 get_page 啊。。。。。。

真是个套娃问题

    但当我在网上寻求答案时,发现了global这个方法,它可以改变函数外的数值。大概就像这样:

    原本函数内的x是封装在函数里的,与外界没有关系,但global就把它们联系起来了。

    所以,我们可以在函数外命令since_id为‘’,然后通过global迭代改变它的值。是不是感觉这样一个无限循环的问题可以解决了?

代码附上:


结果大概是这样的:

详细代码:

import requests

from pymongo import MongoClient as mc

from pyquery import PyQuery as pq

#basic_info#

basic_url='https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1076032830678474'

since_id=''

final_url=basic_url+'&since_id='+str(since_id)

headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74'}

first_result=requests.get(final_url,headers=headers)

second_result=first_result.json()

third_result=second_result.get('data')

#get_since_id#

def get_since_id():

    global since_id

    forth_result=third_result.get('cardlistInfo').get('since_id')

    return since_id   

#get_page#

def get_page(since_id):

    fifth_results=third_result.get('cards')

    for fifth_result in fifth_results:

        six_result=fifth_result.get('mblog')

        weibos={}

        weibos['comments']=six_result.get('comments_count')

        weibos['text']=pq(six_result.get('text')).text()

        yield weibos

#main#

def main():

    since_id=''

    for i in range(1,11):

        print('page_{}'.format(i))

        weibos=get_page(since_id)

        for weibo in weibos:

            print(weibo)

        since_id=get_since_id()

if __name__=='__main__':

    main()


本人非计算机专业学生,编程也是刚学不久,发文章出来也是希望大家少像我一样踩坑,如果有讲的不好的地方,请多包涵!!!


Python爬虫过程中遇到微博since_id怎样处理的评论 (共 条)

分享到微博请遵守国家法律