您的位置:

用Python爬取微博评论

介绍

微博是一个社交媒体平台,允许用户在其平台上发布信息、分享照片和视频。这个平台也是一个信息获取来源,如其用户的评论和转发。在本文中,我们将介绍如何使用 Python 代码从微博上爬取评论。

Python根据关键字爬取微博

许多人使用微博来查找有关特定关键字的信息。我们可以通过 Python 代码轻松地从微博上爬取这些信息。以下是 Python 爬取微博的示例代码:

    # 引入所需的库
    import requests 
    from bs4 import BeautifulSoup
  
    url = 'https://s.weibo.com/weibo?q=Python&Refer=STopic_box'
    res = requests.get(url)
    html = res.text
    soup = BeautifulSoup(html,'html.parser')
  
    content_lis = soup.find_all('p',class_='txt')
    for content in content_lis:
        print(content.text)

上面的代码中,我们引入了 requests 库和 BeautifulSoup 库。使用 requests 库获取关于 Python 的微博网页内容,用 BeautifulSoup 库将网站的 HTML 解析为可供操作的格式。 最后,我们从页面中找到类名为 "txt" 的段落标签,打印出其中文本内容。

Python爬取微博评论代码

在微博上,我们还可以获取某条微博的评论。因此,想要从某条微博上获取评论内容,需要先获取该微博的 URL。下面的代码给出了如何从一个特定用户名和某条特定微博的 ID 来获取评论内容。

    # 引入所需的库
    import requests 
    from bs4 import BeautifulSoup
  
    user_name = 'user_name'
    weibo_id = 'id'
  
    url = 'https://weibo.cn/comment/'+weibo_id+'?uid='+user_name+'&page=1'
    res = requests.get(url)
    html = res.text
    soup = BeautifulSoup(html,'html.parser')
  
    content_lis = soup.find_all('span',class_='ctt')
    for content in content_lis:
        print(content.text)

上面 “user_name” 必须替换为所需的用户名,"id" 必须被替换为所需的微博 ID 值。我们使用 requests 库. 通过上面获取的 URL,获取关于评论微博页面内容,然后将 HTML 解析成 BeautifulSoup 对象。 最后,我们从批准的 comment 节点中找到类名为 “ctt” 的段落标签,打印评论。

Python爬取微博数据

我们可以使用 Python 获取有关特定用户在微博上的所有微博和评论。使用 Python 代码获取微博信息,可能是在爬取时被微博相关限制最为困难的任务。可以使用微博开放 API(Application Programming Interface)来获取这些信息。另一种方式是通过网站获取,并遵守关于获取数据的限制。

Python爬取微博热搜榜

微博热搜榜是获得热点新闻和事件的一个常用来源,这里将介绍使用 Python 来爬取微博热搜榜。以下是 Python 爬取微博热搜榜的示例代码。

    # 引入所需的库
    import requests
    from bs4 import BeautifulSoup
  
    url = 'https://s.weibo.com/top/summary?cate=realtimehot'
    res = requests.get(url)
    html = res.text
    soup = BeautifulSoup(html,'html.parser')
  
    content_lis = soup.find_all('td',class_='td-02')
    for content in content_lis:
        print(content.text)

我们首先将页面 HTML 网页下载到本地,然后使用 BeautifulSoup 库进行操作。 找到页面中类名为 “td-02” 的内容,就是热门话题的内容。

用Python爬取微博热搜

我们还可以爬取某个地域内微博用户关心的热点话题。此处用 Python 代码实现这个功能。以下是 Python 爬取微博热搜的示例代码。

    # 引入所需的库
    import requests
    from bs4 import BeautifulSoup
 
    city = '北京'
    url = 'https://s.weibo.com/top/summary?cate=realtimehot&city='+city
    res = requests.get(url)
    html = res.text
    soup = BeautifulSoup(html,'html.parser')
  
    content_lis = soup.find_all('td',class_='td-02')
    for content in content_lis:
        print(content.text)

和上述代码的差别仅仅在于URL,这个URL设置了一个地域,并返回了该地域的热门话题。

Python爬取某人所有微博

如果我们想要获取某个微博用户发布的所有的微博并保存到本地,可以使用以下的代码。下面示例代码中的用户名是 "user_name",文件名是 "user_weibo.txt"。代码中使用了 requests 库中的 get 函数发起 GET 请求,用于访问该用户的主页。然后,该请求响应的 HTML 被解析为一个 Beautiful Soup 对象,以便提取所需信息。

    # 引入所需的库
    import requests
    from bs4 import BeautifulSoup
  
    headers ={
        'USER-Agent':'Mozilla/5.0(X11;Linuxx86_64;rv:60.0) Gecko/20100101Firefox/60.03.0esr'
    }
  
    name = 'user_name'
    url = 'https://weibo.cn/'+name+'/profile?filter=1&page=1'
  
    r = requests.get(url,headers=headers)
    html = r.text
    soup = BeautifulSoup(html,'html.parser')
  
    page_list = soup.find_all('div',class_='pa')
  
    for index in range(0,len(page_list)):
        url = 'https://weibo.cn/'+name+'/profile?filter=1&page='+str(index+1)
        r = requests.get(url,headers=headers)
        html = r.text
        soup = BeautifulSoup(html,'html.parser')
  
        page_info = soup.find_all('span',class_='ctt')
        for page in page_info:
            print(page.text)
  
            path = 'user_weibo.txt'
            with open(path,'a') as liver_pool:
                liver_pool.write(page.text)

当结果被解析好后,我们可以看到 Beautiful Soup 对象中有数个 "div" 元素,每一个都代表一条微博。我们用 Python 代码来找到并获取这些元素,将其存储到一个列表中。之后释放请求,(循环运行)获取每一页的数据,将其存储在对应的 .txt 文件中,其中每当一个新的微博被找到时,相应的文本就会被写入文件。

Python爬取微博内容和评论

下面,给出了一个完整的示例代码,可以同时获取某个用户在微博上的所有微博和它们的评论,并将数据保存到同一个文件中。

    # 引入所需的库
    import requests
    from bs4 import BeautifulSoup
  
    headers ={
        'USER-Agent':'Mozilla/5.0(X11;Linuxx86_64;rv:60.0) Gecko/20100101Firefox/60.03.0esr'
    }
 
    name = 'user_name'
    url = 'https://weibo.cn/'+name+'/profile?filter=1&page=1'
  
    r = requests.get(url,headers=headers)
    html = r.text
    soup = BeautifulSoup(html,'html.parser')
    
    # 从网页中获取微博链接并存储到列表中
    find_class = soup.find_all('div',class_='c',id=True)
    find_list = []
    for ident in find_class:
        find_list.append('https://weibo.cn/comment/'+ident['id'][2:]+'?uid='+name+'&page=1')
  
    data_set = []
  
    # 获取每个微博的评论并将其存储在列表中
    for url in find_list:
        try:
            r = requests.get(url,headers=headers)
            html = r.text
            soup = BeautifulSoup(html,'html.parser')
            info = soup.find_all('span',class_='ctt')
            for i in info:
                data_set.append(i.text)
        except:
            continue
  
    # 获取每一页的微博并将其存储在列表中
    page_list = soup.find_all('div',class_='pa')
    for index in range(0,len(page_list)):
        url = 'https://weibo.cn/'+name+'/profile?filter=1&page='+str(index+1)
        try:
            r = requests.get(url,headers=headers)
            html = r.text
            soup = BeautifulSoup(html,'html.parser')
            info = soup.find_all('span',class_='ctt')
            for i in info:
                data_set.append(i.text)
        except:
            continue
  
    # 存储至文件
    path = 'user.txt'
    with open(path,'w') as liver_pool:
        for ent in data_set:
            liver_pool.write(ent+'\n')
  
    print('Data has been written to "user.txt"')

首先,通过 requests 库的 get() 方法请求出特定用户的主页内容,将 html 内容作为参数传递给 BeautifulSoup() 方法进行解析, 然后我们可以找到每个微博的评论,将它们存储到一个列表中。之后我们获取此用户在每一页的微博,并存储到同一个文本文件中。在示例代码中,文件名为 “user.txt”。