RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 993768
Accepted
rybic
rybic
Asked:2020-06-18 02:13:45 +0000 UTC2020-06-18 02:13:45 +0000 UTC 2020-06-18 02:13:45 +0000 UTC

如果您还可以解释如何解析 VK 以获得喜欢的评论(数字),则解析器不起作用(KeyError)

  • 772

编码:

import requests
import csv
from bs4 import BeautifulSoup as bs


headers={'accept':'*/*',
         'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'
}
base_url='https://vk.com/hearthstone'


def hs_parse(base_url,headers):
    stats=[]
    urls=[]
    urls.append(base_url)
    session=requests.session()
    request=session.get(base_url,headers=headers)
    while len(stats) < 60:
        if request.status_code==200:
            soup=bs(request.content,'lxml')
        for url in urls:
            request = session.get(url, headers=headers)
            soup = bs(request.content, 'lxml')
            divs = soup.find_all('div', attrs={'class': 'like_btns'})
            for a in divs:
                com=soup.find_all('a',attrs={'class':'like_btn comment _comment _reply_wrap'})
                for div in a:
                    comentators=a.find('div',attrs={'class':'like_button_count'})
                    if comentators not in stats:
                        stats.append({'comentators':comentators})
                    else:
                        pass

            for a in divs:
                lik=soup.find_all('a',attrs={'class':'like_btn like _like'})
                for div in a:
                    likes=a.find('div',attrs={'class':'like_button_count'})
                    if likes not in stats:
                        stats.append({' likes':  likes})
                    else:
                        pass
            for a in divs:
                rep = soup.find_all('a', attrs={'class': 'like_btn share _share'})
                for div in a:
                    reposts = a.find('div', attrs={'class': 'like_button_count'})
                    if reposts not in stats:
                        stats.append({' reposts': reposts})
                    else:
                        pass
            for a in divs:
                wh = soup.find_all('a', attrs={'class': 'like_views _views'})
                for div in a:
                   watching = a.find('div', attrs={'data-count': 'title'})
                   if watching not in stats:
                       stats.append({'  watching':  watching})
                   else:
                       pass
        for url in urls:
            request = session.get(url, headers=headers)
            soup = bs(request.content, 'lxml')
            content = soup.find('div', attrs={'class': 'wall_post_text'})
            if content not in stats:
                stats.append(content)
            else:
                pass
        for url in urls:
            request = session.get(url, headers=headers)
            soup = bs(request.content, 'lxml')
            author = soup.find('div', attrs={'data-post-click-type': 'post_owner_link'})
            stats.append(author)



            print(len(stats))
        else:
            print('DONE')
            print(stats)
        return stats

def files_writer(stats):
    with open('parsed_hs_pub.csv','w',encoding='utf-8'
              ) as file:
        writer=csv.writer(file)
        writer.writerow((' author','content','likes','comentators','reposts','watching'))
        for stats in stats:
            writer.writerow((stats[' author'],stats['content'],stats['likes'],stats['comentators'],stats['reposts'],stats['watching']))

stats=hs_parse(base_url,headers)
files_writer(stats)

错误:

Traceback (most recent call last): File "C:/Users/User/Desktop/python 3/фриланс и примеры/Новый текстовый документ.py", line 88, in <module> files_writer(stats) File "C:/Users/User/Desktop/python 3/фриланс и примеры/Новый текстовый документ.py", line 85, in files_writer writer.writerow((stats[' author'],stats['content'],stats['likes'],stats['comentators'],stats['reposts'],stats['watching'])) KeyError: ' author'
python
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    nomnoms12
    2020-06-18T02:57:58Z2020-06-18T02:57:58Z

    按照评论中的要求,使用 VK API 获取信息:

    例子:

    from vk_api import VkApi
    
    vkSession = VkApi(token='Сервисный ключ')  # Не забудьте подставить сюда Ваш токен!
    vk = vkSession.get_api()
    
    wall = vk.wall.get(
        owner_id=-57989123,
        count=3
    )
    for i, post in enumerate(wall['items']):
        print(
            'Пост:        ', i + 1, '\n'
            'Лайков:      ', post['likes']['count'], '\n'
            'Комментариев:', post['comments']['count'], '\n'
        )
    

    标准输出:

    Пост:         1 
    Лайков:       716 
    Комментариев: 343 
    
    Пост:         2 
    Лайков:       1108 
    Комментариев: 86 
    
    Пост:         3 
    Лайков:       44 
    Комментариев: 70 
    

    通过稍微更改代码,您可以获得有关帖子的几乎所有信息。
    这是一个示例对象post:

    {'id': 578025, 'from_id': -57989123, 'owner_id': -57989123, 'date': 1557507849, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Суперзлодей Рафаам приложил немало усилий, чтобы собрать вместе наиболее мнительных и опасных злодеев со сверхспособностями и провернуть самое амбициозное дело в своей карьере — украсть волшебный город Даларан!', 'is_pinned': 1, 'attachments': [{'type': 'video', 'video': {'id': 456239697, 'owner_id': -57989123, 'title': 'План таков... | Ролик Hearthstone: «Похищение Даларана»', 'duration': 115, 'description': 'Суперзлодей Рафаам приложил немало усилий, чтобы собрать вместе наиболее мнительных и опасных злодеев со сверхспособностями и провернуть самое амбициозное дело в своей карьере — украсть волшебный город Даларан!\n\nПосмотрите новый ролик, узнайте подробности о невероятном замысле Рафаама и приготовьтесь к новому приключению «Похищение Даларана», выход которого состоится 16 мая!\n\nУзнайте больше о новом дополнении «Возмездие теней» на сайте https://www.RiseofShadows.com', 'date': 1557496817, 'comments': 33, 'views': 200132, 'width': 1920, 'height': 1080, 'photo_130': 'https://sun9-13.userapi.com/c848524/v848524685/18be6a/nG7QFKMDr8E.jpg', 'photo_320': 'https://sun9-14.userapi.com/c848524/v848524685/18be68/rQVqYIFUdFM.jpg', 'photo_800': 'https://sun9-29.userapi.com/c848524/v848524685/18be62/fdqwsZqZ1Kc.jpg', 'photo_1280': 'https://sun9-3.userapi.com/c848524/v848524685/18be63/4NYdePXAAEM.jpg', 'first_frame_320': 'https://pp.userapi.com/c854220/v854220580/3aba2/sHN7jFkyQAg.jpg', 'first_frame_160': 'https://pp.userapi.com/c854220/v854220580/3aba7/V1Qky8KOtLg.jpg', 'first_frame_0': 'https://pp.userapi.com/c854220/v854220580/3aba5/gP6fpFx1jpg.jpg', 'first_frame_130': 'https://pp.userapi.com/c854220/v854220580/3aba8/_DSKM3GcKoo.jpg', 'first_frame_720': 'https://pp.userapi.com/c854220/v854220580/3aba3/R5Sv15iVpQ0.jpg', 'first_frame_1024': 'https://pp.userapi.com/c854220/v854220580/3aba4/qc1bUo0GEmQ.jpg', 'first_frame_1280': 'https://pp.userapi.com/c854220/v854220580/3aba1/DErc1v8_WOw.jpg', 'first_frame_800': 'https://pp.userapi.com/c854220/v854220580/3aba0/gScEEo5ycZA.jpg', 'access_key': '4aefad1cf26f4cf992', 'can_add': 1, 'track_code': 'video_9c1d70ffX0FCz7C-NmxV4DqUwTje88-CxxxQGxkFDw3MikrAQYACZ1jCt7U7VWTSCQ'}}], 'post_source': {'type': 'vk'}, 'comments': {'count': 343, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 716, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 24, 'user_reposted': 0}, 'views': {'count': 188902}}
    
    • 2
  2. Jack_oS
    2022-02-16T22:23:06Z2022-02-16T22:23:06Z

    您初始化列表stats:

    stats = []
    

    并向其中添加字典:

    stats.append({'comentators':comentators})
    stats.append({' likes':  likes})
    stats.append({' reposts': reposts})
    stats.append({'  watching':  watching})
    

    但是当涉及到时author,只需添加值:

    stats.append(author)
    

    并且,因此,

    writer.writerow((stats[' author'],stats['content'],stats['likes'],stats['comentators'],stats['reposts'],stats['watching']))
    

    你得到一个错误KeyError: ' author',,因为 没有这样的钥匙...

    PS 并且键中有空格,你有一个跳跃:在 Python 中,字符串 'author' 和 'author' 彼此不相等。

    • 2
  3. Ruslan G.
    2022-02-16T22:06:30Z2022-02-16T22:06:30Z

    您可以尝试在此代码中查找错误

    这里有一个提示:KeyError: ' author'

    writer.writerow()期望类似:

    [{' author': '...',
      'content': '...',
      'likes': '...',
      'comentators': '...',
      'reposts': '...',
      'watching': '...'}
    ]
    

    但得到一个完全不同的结构。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5