Python 爬虫之WB评论爬取

Python 爬虫之WB评论爬取

在本篇博客中,我们将分享如何使用 Python 爬取微博评论。

准备爬取的链接:https://m.weibo.cn/detail/4899535271232791

mid:4899535271232791

如果需要爬取多篇,在mid列表中添加这个值即可。

准备工作

在开始之前,我们需要安装以下 Python 库:

  • requests
  • json
  • csv

可以使用以下命令安装:

pip install requests
pip install json
pip install csv

获取网页源码

首先,我们需要获取网页源码。我们使用 requests 库发送请求,然后使用 response.text 获取文本格式的响应。Cookie需要替换成自己的,参考链接

import requests

def get_html(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36 Edg/113.0.1774.35"
    }
    cookies = {
        "cookie": "_T_WM=731%26lfid%3D4899535271232791%26uicode%3D20000061%26fid%3D4899535271232791"
    }
    response = requests.get(url, headers=headers, cookies=cookies)
    response.encoding = response.apparent_encoding
    return response.text

解析网页源码

接下来,我们需要从网页源码中解析出评论内容。首先,我们需要使用 json 库将响应解析为 JSON 格式。然后,我们可以使用以下代码获取评论内容:

import json

def get_first_comments(mid):
    max_id = 0
    max_id_type = 0
    url = '<https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id={}&max_id_type={}>'
    while True:
        response = get_html(url.format(mid, mid, max_id, max_id_type))
        content = json.loads(response)
        max_id = content['data']['max_id']
        max_id_type = content['data']['max_id_type']
        text_list = content['data']['data']
        for text in text_list:
            text_data = text['text']
            save_text_data(text_data)
        if int(max_id) == 0:    # 如果max_id==0表明评论已经抓取完毕了
            break

保存评论

最后,我们需要将评论保存到 CSV 文件中。我们可以使用 csv 库将评论写入 CSV 文件。

import csv

def save_text_data(text_data):
    with open("data.csv", "a", encoding="utf-8", newline="")as fi:
        fi = csv.writer(fi)
        fi.writerow([text_data])

完整代码

import json
import csv
import re
import requests
import time

NeedGetSecond = False # 如果需要获取二级评论可以添加这句

# 获取网页源码的文本文件
def get_html(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36 Edg/113.0.1774.35"
    }
    cookies = {
        "cookie": "_T_WM=73032936361; WEIBOCN_FROM=1110006030; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WW2KFjqOW7WkW1NSjONOgWjqQfLNw0ch4HorcwXlmNcOXZAY=|10|b3abadaf12c4b3b187a67d7b2d7d3fc7; XSRF-TOKEN=ca3cdf; mweibo_short_token=8a67338aaf; M_WEIBOCN_PARAMS=oid%3D4899535271232791%26luicode%3D20000061%26lfid%3D4899535271232791%26uicode%3D20000061%26fid%3D4899535271232791"
    }
    response = requests.get(url, headers=headers, cookies=cookies)
    response.encoding = response.apparent_encoding
    time.sleep(3)   # 加上3s 的延时防止被反爬
    return response.text

def get_string(text):
    t = ''
    flag = 1
    for i in text:
        if i == '<':
            flag = 0
        elif i == '>':
            flag = 1
        elif flag == 1:
            t += i
    return t

# 保存评论
def save_text_data(text_data):
    text_data = get_string(text_data)
    with open("data.csv", "a", encoding="utf-8", newline="")as fi:
        fi = csv.writer(fi)
        fi.writerow([text_data])

# 获取二级评论
def get_second_comments(cid):
    max_id = 0
    max_id_type = 0
    url = '<https://m.weibo.cn/comments/hotFlowChild?cid={}&max_id={}&max_id_type={}>'
    while True:
        response = get_html(url.format(cid, max_id, max_id_type))
        content = json.loads(response)
        comments = content['data']
        for i in comments:
            text_data = i['text']
            save_text_data(text_data)
        max_id = content['max_id']
        max_id_type = content['max_id_type']
        if max_id == 0:		# 如果max_id==0表明评论已经抓取完毕了
            break

# 获取一级评论
def get_first_comments(mid):
    max_id = 0
    max_id_type = 0
    url = '<https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id={}&max_id_type={}>'
    while True:
        response = get_html(url.format(mid, mid, max_id, max_id_type))
        content = json.loads(response)
        max_id = content['data']['max_id']
        max_id_type = content['data']['max_id_type']
        text_list = content['data']['data']
        for text in text_list:
            text_data = text['text']
            total_number = text['total_number']
            if int(total_number) != 0 and NeedGetSecond:  # 如果有二级评论就去获取二级评论。
                get_second_comments(text['id'])
            save_text_data(text_data)
        if int(max_id) == 0:    # 如果max_id==0表明评论已经抓取完毕了
            break

if __name__ == '__main__':
    """
    <https://m.weibo.cn/detail/4899535271232791>
    """
    mid = ["4899535271232791"]
    for id in mid:
        get_first_comments(id)    # 爬取一级评论

总结

本篇博客介绍了如何使用 Python 爬取微博评论。我们使用 requests 库发送请求,使用 json 库解析响应,使用 csv 库将评论保存到 CSV 文件中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的 Python 爬虫教程,可以批量爬取指定网站的图片: 首先,我们需要安装 requests 和 BeautifulSoup 这两个库。可以通过以下命令进行安装: ``` pip install requests pip install beautifulsoup4 ``` 接下来,我们需要编写代码。以下是一个示例代码,可以爬取指定网站的图片并保存到本地: ```python import requests from bs4 import BeautifulSoup import os # 爬取图片的网站 url = "https://www.example.com/" # 请求头,模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} # 发送请求,获取网页内容 response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 创建保存图片的文件夹 if not os.path.exists("images"): os.makedirs("images") # 遍历所有的图片标签,获取图片链接并保存到本地 for img in soup.find_all("img"): img_url = img.get("src") if img_url.startswith("http"): response = requests.get(img_url) with open("images/" + os.path.basename(img_url), "wb") as file: file.write(response.content) print("已保存图片:", img_url) ``` 在上述代码中,我们首先定义了要爬取的网站的 URL。然后,我们使用 requests 库发送一个 GET 请求,获取网页的 HTML 内容。接着,我们使用 BeautifulSoup 库对 HTML 进行解析,获取所有的图片标签。最后,我们使用 requests 库再次发送 GET 请求,获取图片的二进制数据,并保存到本地的 images 文件夹中。 注意,这里我们使用了一个 if 判断来过滤掉非 HTTP 开头的图片链接,以避免出现下载错误的情况。 为了更好的用户体验,代码中还加入了一些注释,方便大家理解。 希望这个简单的 Python 爬虫教程能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦滋堡的摸鱼芝士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值