Python爬虫之手机端微博数据爬取(十二)

原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080
本次代码的环境:
运行平台: Windows
Python版本: Python3.x
IDE: PyCharm

一、 概述

在博文Python爬虫之微博评论数据的爬取(十)中,已经介绍了爬取移动端的用户评论。(关于微博的基本知识可以见博文微博爬虫基本知识了解(十一)),这篇文章主要介绍,Python爬取手机端的数据。手机端的数据加载时用Ajax技术,相关内容可以参考文章AJAX数据爬取基本认识及原理。废话少说,直接开始啦!!!!!

二、Ajax动态加载数据

首先呢,要先找到自己的cookie(了解cookie的作用和会话机制可参考博文:session和Cookies实现会话机制),这里就不赘述了。直接去认识,手机端的数据,是如何进行加载的,通过以下的图1翟天临的致歉信内容来认识(个人观点:人孰能无过,知错能改善莫大焉)。
 


在这里插入图片描述
图1

F12打开开发者工具,Network—》XHR,筛选出所有的xhr文件,如下图2:在⚙config(绿色箭头)的xhr文件中可以找到自己的cookie、user-agent,包括传输方式等信息。在⚙hotflow?..(红色箭头)所指的文件中,来查看Request URL。
 


在这里插入图片描述
图2

接着,滑动页面的滚动条,发现加载了更多的⚙hotflow?..的xhr文件,如图3。将它们一一打开找到Request URL,进行对比。
 


在这里插入图片描述
图3

Request URL: https://m.weibo.cn/comments/hotflow?id=4339602683247836&mid=4339602683247836&max_id_type=0
Request URL: https://m.weibo.cn/comments/hotflow?id=4339602683247836&mid=4339602683247836&max_id=3807628885891151&max_id_type=0
Request URL: https://m.weibo.cn/comments/hotflow?id=4339602683247836&mid=4339602683247836&max_id=1224876072254204&max_id_type=0
Request URL: https://m.weibo.cn/comments/hotflow?id=4339602683247836&mid=4339602683247836&max_id=545790203242756&max_id_type=0

发现只是max_id的值不同(实际上还有max_id_tpye也不同)。也就是说只要可以不断获取这个max_id的值,并不断的更新URL(url是由https://m.weibo.cn/comments/hotflow?用户id&midid&max_id&max_id_type组成),就可以知道将数据爬出来,如图4所示,这些数据包括:微博数据,个人信息,单条微博评论数据。选择preview—》data里面可以看到这些信息。
 


在这里插入图片描述
图4

言归正传,要想获得下一次的url,该从哪个地方得到这个max_id和max_id_type。实际上,在之前的返回的json文件的最后面有下一个的max_id和max_id_type。打开之前的⚙hotflow的preview,如下图5所示:
 


在这里插入图片描述
图5

这下子就找到了,可以拼接下一个url了,所以只要不断更新这个max_id和max_id_type就可以实现热评的多次爬取了。

三、代码及结果展示

# -*- coding: utf-8 -*-

import requests
import time
import os
import csv
import sys
import json
from bs4 import BeautifulSoup
import importlib
importlib.reload(sys)

# 要爬取热评的起始url
url = 'https://m.weibo.cn/comments/hotflow?id=4339602683247836&mid=4339602683247836&max_id='
headers = {
    'Cookie': '请给出你的cookie',
    'Referer': 'https://m.weibo.cn/detail/4312409864846621',
    'User-Agent': '请给出你的user-agent',
    'X-Requested-With': 'XMLHttpRequest'
}

def get_page(max_id, id_type):
    params = {
        'max_id': max_id,
        'max_id_type': id_type
    }
    try:
        r = requests.get(url, params=params, headers=headers)
        if r.status_code == 200:
            return r.json()
    except requests.ConnectionError as e:
        print('error', e.args)


def parse_page(jsondata):
    if jsondata:
        items = jsondata.get('data')
        item_max_id = {}
        item_max_id['max_id'] = items['max_id']
        item_max_id['max_id_type'] = items['max_id_type']
        return item_max_id

def write_csv(jsondata):
    datas = jsondata.get('data').get('data')
    for data in datas:
        created_at = data.get("created_at")
        like_count = data.get("like_count")
        source = data.get("source")
        floor_number = data.get("floor_number")
        username = data.get("user").get("screen_name")
        comment = data.get("text")
        comment = BeautifulSoup(comment, 'lxml').get_text()
        writer.writerow([username, created_at, like_count, floor_number, source,
                         json.dumps(comment,  ensure_ascii=False)])

# 存为csv
path = os.getcwd() + "/weiboComments.csv"
csvfile = open(path, 'w',encoding = 'utf-8')
writer = csv.writer(csvfile)
writer.writerow(['Usename', 'Time', 'Like_count', 'Floor_number', 'Sourse', 'Comments'])

maxpage = 50 #爬取的数量
m_id = 0
id_type = 0
for page in range(0, maxpage):
    print(page)
    jsondata = get_page(m_id, id_type)
    write_csv(jsondata)
    results = parse_page(jsondata)
    time.sleep(1)
    m_id = results['max_id']
    id_type = results['max_id_type']

如图6是用记事本打开的csv格式数据,如图7是excel打开的csv数据格式。
 


在这里插入图片描述
图6
 

在这里插入图片描述
图7

四、 总结

这篇文章主要介绍了,Python爬取手机端微博。是对前面文章的一个应用。这样就介绍了两种爬取评论的方式。第三种爬取PC端,还需要经过一段时间的积累和沉淀。一起学习加油。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。
 

 
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42555080/article/details/88363463