简单的爬取B站视频评论
2019年12月20日15:14:09补充: 这篇博客为刚学爬虫的一个简单实践,主要使用到的为selenium模拟点击 补充说明的主要原因是有小伙伴问我评论提取的相关问题,这里统一回复一下
最简单的办法是直接调用B站的API: 请求这个接口,oid是视频的av号,pn为页码,可以得到json数据 不要直接点,复制到浏览器地址栏打开
简单的爬取B站视频评论 技术不足还请大神多多包涵
import re
import requests
from selenium import webdriver
from requests.exceptions import RequestException
import time
# 获取评论第一页的源码
def get_first_page_source(url,content_list):
browser = webdriver.Chrome()
browser.get(url)
browser.execute_script(window.scrollBy(0,2000))#调用js代码实现滑动
time.sleep(4)#等待加载完毕
content_list.append(browser.page_source)
return browser.page_source
# 获取评论总页数
def get_max_size_page_info(html):
pattern = re.compile(<div.*?header-page.*?result">共(d+)页</span>,re.S)
return re.findall(pattern,html)[0]
# 获取其他页的源码
def get_more_page_source(url,content_list):
browser = webdriver.Chrome()
# browser.set_window_size(1000,30000)
browser.get(url)
browser.execute_script(window.scrollBy(0,2000))#调用js代码实现滑动
time.sleep(4)#等待加载完毕
content_list.append(browser.page_source)
max_size = int(get_max_size_page_info(get_first_page_source(url,content_list)))
for i in range(max_size-1):
next_btn = browser.find_element_by_css_selector(div.comment-header div.header-page a.next)#使用css选择器选择下一页a标签
next_btn.click()
time.sleep(1.5)
content_list.append(browser.page_source)
# 获取评论信息
def get_comment(content):
# 使用正则表达式匹配
pattern = re.compile(<div.*?list-item.*?data-id="(d+)".*?con.*?">.*?data-usercard-mid="(d+)".*?name.*?">
+ (.*?)</a>.*?<p.*?text">(.*?)</p>.*?</div>.*?</div>,re.S)
for item in content:
info = re.findall(pattern,item)
for info_item in info:
# 使用生成器规范化数据
yield {
comment_id:info_item[0],
user_id:info_item[1],
user_name:info_item[2],
comment_text:info_item[3]
}
# return info
def main():
url = 填写需要爬的视频页网址
comment_list = []
get_more_page_source(url,comment_list)
get_comment(comment_list)
with open(D://comment_list.txt,a,encoding=utf-8) as f:
for item in get_comment(comment_list):
f.write(str(item) +
)
print(len(comment_list))
if __name__ == __main__:
main()
部分输出数据
