2022爬取微博评论-极简40行代码

 思路找到用户评论内容的位置,分析各个xhr里的不同,解析html,提取一页数据,通过循环判断拿到整条微博评论内容的数据,存储数据。

分析:网页源代码未找到评论相关的内容,打概率是通过异步加载的,把挡位调到Fetch/XHR,一个个打开在预览里查看,在buildComments里开头的能找到,从负载里明显看到几个xhr的不同:

1,第一个的数据只有6行数据,其余都是8行,且第一个没有max_id和flow的数据

2.中间的max_id每个不同,且最后一个xhr的max_id =0 

 

 

 

 很明显这数据很容易通过json拿到,包括用户 id 日期 评论内容等

 上代码:

import requests
import csv #方便存储数据
import time  #防止被微博识别爬虫,让速度慢些
f = open("微博评论1.csv",mode ='w',newline='',encoding='utf-8')
csv_writer = csv.DictWriter(f,fieldnames=[
    '用户id',
    '用户',
    '评论日期',
    '评论内容'
])
csv_writer.writeheader()   #创建表头
#加headers python访问微博时更像是人来操作,防止微博识别爬虫
headers = {
    "cookie": "*****",
    "referer": "https://weibo.com/1720962692/MeGtbrorP",
    "user-agent": "*****",
    "x-requested-with": "XMLHttpRequest"
}

cooking为了登录 爬取更多数据,ua和cooking涉及隐私不展示了

mid =""   #因为第一页没有max_id ,用来判断,这里不要设置成None
while True: #循环
    if mid == "":
        n_url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=4834998496528837&is_show_bulletin=2&is_mix=0&count=10&uid=1720962692'
    elif mid ==0: #最后一页的max_id = 0用来结束循环
        break
    else:
        n_url ="https://weibo.com/ajax/statuses/buildComments?flow=0&is_reload=1&id=4834998496528837&is_show_bulletin=2&is_mix=0&max_id="+str(mid)+"&count=20&uid=1720962692"
    resp = requests.get(url=n_url, headers=headers)
    datas = resp.json()['data']
    print(datas)
    mid = resp.json()['max_id']
    print(mid)
    time.sleep(3)
    for data in datas:
        dit = {
            '用户id': data['user']['id'],
            '用户': data['user']['screen_name'],
            '评论日期': data['created_at'],
            '评论内容': data['text_raw']
         }
        csv_writer.writerow(dit)

 完成展示下结果

 

分布式爬虫是指将爬取任务分散到多个上进处理,以提高爬取效率和速度。下面是一个单的分布式爬虫爬取微博评论代码示例: 1. 首先,需要安装必要的库,如requests、beautifulsoup等。 2. 创建一个任务队列,用于存放待爬取微博URL。 3. 创建多个爬虫节点,每个节点从任务队列中获取待爬取的URL,并进相应的处理。 4. 在每个节点中,使用requests库发送HTTP请求获取微博页面的HTML内容。 5. 使用beautifulsoup库解析HTML内容,提取出微博评论的相关信息。 6. 将提取到的评论信息保存到数据库或文件中。 下面是一个单的代码示例: ```python import requests from bs4 import BeautifulSoup from multiprocessing import Process, Queue # 定义任务队列 task_queue = Queue() # 定义爬虫节点 def crawler(): while not task_queue.empty(): url = task_queue.get() response = requests.get(url) html = response.text # 解析HTML内容,提取评论信息 soup = BeautifulSoup(html, 'html.parser') comments = soup.find_all('div', class_='comment') for comment in comments: # 提取评论内容等信息并保存到数据库或文件中 pass # 添加待爬取微博URL到任务队列 task_queue.put('https://weibo.com/xxxxxx') task_queue.put('https://weibo.com/yyyyyy') # 创建多个爬虫节点 num_nodes = 4 nodes = [] for i in range(num_nodes): node = Process(target=crawler) nodes.append(node) node.start() # 等待所有节点完成任务 for node in nodes: node.join() ``` 请注意,以上代码只是一个单示例,实际的分布式爬虫需要考虑更多的细节,如任务调度、数据去重、异常处理等。另外,爬取微博评论需要注意遵守相关网站的爬虫规则,以免触发反爬机制。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值