Python爬虫过程中遇到微博since_id怎样处理
在崔庆才《网络爬虫开发实战》第6.3小节中,举出Ajax数据爬取的一个实例,即使用Python爬取微博数据。但著书时间相对较早,原本的请求URL中用‘page’就可以实现翻页,如今却是使用‘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()
本人非计算机专业学生,编程也是刚学不久,发文章出来也是希望大家少像我一样踩坑,如果有讲的不好的地方,请多包涵!!!