1. B站博人传评论数据爬取简介

今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看。网址: https://www.bilibili.com/bangumi/media/md5978/?from=search&seid=16013388136765436883#short
在这个网页看到了18560条短评,数据量也不大,抓取看看,使用的还是scrapy。

2. B站博人传评论数据案例—获取链接

从开发者工具中你能轻易的得到如下链接,有链接之后就好办了,如何创建项目就不在啰嗦了,我们直接进入主题。

我在代码中的parse函数中,设定了两个yield一个用来返回items 一个用来返回requests。
然后实现一个新的功能,每次访问切换UA,这个点我们需要使用到中间件技术。

'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class BorenSpider(scrapy.Spider):BASE_URL = "https://bangumi.bilibili.com/review/web_api/short/list?media_id=5978&folded=0&page_size=20&sort=0&cursor={}"name = 'Boren'allowed_domains = ['bangumi.bilibili.com']start_urls = [BASE_URL.format("76742479839522")]def parse(self, response):print(response.url)resdata = json.loads(response.body_as_unicode())if resdata["code"] == 0:# 获取最后一个数据if len(resdata["result"]["list"]) > 0:data = resdata["result"]["list"]cursor = data[-1]["cursor"]for one in data:item = BorenzhuanItem()item["author"]  = one["author"]["uname"]item["content"] = one["content"]item["ctime"] = one["ctime"]item["disliked"] = one["disliked"]item["liked"] = one["liked"]item["likes"] = one["likes"]item["user_season"] = one["user_season"]["last_ep_index"] if "user_season" in one else ""item["score"] = one["user_rating"]["score"]yield itemyield scrapy.Request(self.BASE_URL.format(cursor),callback=self.parse)

3. B站博人传评论数据案例—实现随机UA

第一步, 在settings文件中添加一些UserAgent,我从互联网找了一些

USER_AGENT_LIST=["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]

第二步,在settings文件中设置 “DOWNLOADER_MIDDLEWARES”

# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {#'borenzhuan.middlewares.BorenzhuanDownloaderMiddleware': 543,'borenzhuan.middlewares.RandomUserAgentMiddleware': 400,
}

第三步,在 middlewares.py 文件中导入 settings模块中的 USER_AGENT_LIST 方法

from borenzhuan.settings import USER_AGENT_LIST # 导入中间件
import randomclass RandomUserAgentMiddleware(object):def process_request(self, request, spider):rand_use  = random.choice(USER_AGENT_LIST)if rand_use:request.headers.setdefault('User-Agent', rand_use)

好了,随机的UA已经实现,你可以在parse函数中编写如下代码进行测试

print(response.request.headers)

4. B站博人传评论数据----完善item

这个操作相对简单,这些数据就是我们要保存的数据了。!

   author = scrapy.Field()content = scrapy.Field()ctime = scrapy.Field()disliked = scrapy.Field()liked = scrapy.Field()likes = scrapy.Field()score = scrapy.Field()user_season = scrapy.Field()

B站博人传评论数据案例—提高爬取速度

这个操作相对简单,这些数据就是我们要保存的数据了。!

   author = scrapy.Field()content = scrapy.Field()ctime = scrapy.Field()disliked = scrapy.Field()liked = scrapy.Field()likes = scrapy.Field()score = scrapy.Field()user_season = scrapy.Field()

5. B站博人传评论数据案例—提高爬取速度

在settings.py中设置如下参数:

# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 1
# The download delay setting will honor only one of:
CONCURRENT_REQUESTS_PER_DOMAIN = 16
CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False

解释说明
一、降低下载延迟
DOWNLOAD_DELAY = 0

将下载延迟设为0,这时需要相应的防ban措施,一般使用user agent轮转,构建user agent池,轮流选择其中之一来作为user agent。

二、多线程
CONCURRENT_REQUESTS = 32
CONCURRENT_REQUESTS_PER_DOMAIN = 16
CONCURRENT_REQUESTS_PER_IP = 16

scrapy网络请求是基于Twisted,而Twisted默认支持多线程,而且scrapy默认也是通过多线程请求的,并且支持多核CPU的并发,我们通过一些设置提高scrapy的并发数可以提高爬取速度。

三、禁用cookies
COOKIES_ENABLED = False

6. B站博人传评论数据案例—保存数据

最后在pipelines.py 文件中,编写保存代码即可

import os
import csv
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class BorenzhuanPipeline(object):def __init__(self):store_file = os.path.dirname(__file__)+'/spiders/bore.csv'self.file = open(store_file,"a+",newline="",encoding="utf-8")self.writer = csv.writer(self.file)def process_item(self, item, spider):try:self.writer.writerow((item["author"],item["content"],item["ctime"],item["disliked"],item["liked"],item["likes"],item["score"],item["user_season"]))except Exception as e:print(e.args)def close_spider(self, spider):self.file.close()

运行代码之后,发现过了一会报错了

去看了一眼,原来是数据爬取完毕~!!!

Python爬虫框架:scrapy抓取B站博人传评论数据相关推荐

  1. python爬取b站评论_Python爬虫框架:scrapy抓取B站博人传评论数据

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  2. python中scrapy可以爬取多少数据_python scrapy框架爬取某站博人传评论数据

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  3. Python爬虫入门【19】: B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的×××姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网 ...

  4. Python爬虫入门教程【19】: B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  5. python爬取b站评论_Python爬虫入门【19】: B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的×××姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网 ...

  6. Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  7. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  8. 【Python】B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  9. requests 可以 scrapy 不行_python学习教程,B站博人传评论数据抓取 scrapy

    点击蓝字"python教程"关注我们哟! 1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多 ...

最新文章

  1. 如何访问自定义键值的二维数组
  2. Java黑皮书课后题第4章:*4.8(给出ASCII码对应的字符)编写程序,得到一个ASCII码的输入(0~27之间的一个整数),然后显示该字符
  3. php 四舍五入百位,php取整函数ceil,floor,round,intval函数的区别
  4. elementui可编辑单元格_ElementUI 表格可编辑单元格
  5. android 二次绘制 layout,View的三次measure,两次layout和一次draw
  6. linux arch 包管理,Archlinux使用包管理方式安装MyEclipse
  7. hdu 1176 馅饼
  8. 去了家新公司,技术总监不让用 IntelliJ IDEA!!想离职了。。
  9. P4475 巧克力王国(KDTree)
  10. 根据列值删除Pandas中的DataFrame行
  11. 【数字全排列】LeetCode 46. Permutations
  12. C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效
  13. JavaScript高级程序设计学习笔记(一)
  14. android蓝牙hid 鼠标,BLE HID协议-----蓝牙鼠标代码流分析
  15. 04 Response对象的status_code属性可以获取响应状态码
  16. SQL语句,数据库增加、删除、修改、查询
  17. [objective-c]使用Lumberjack未定义
  18. 【喜报】“深度强化学习实验室”战略合作伙伴”南栖仙策“完成Pre-A轮融资,高瓴创投领投
  19. HDU 2096 小明A+B
  20. 微信公众号硬件开发杂谈(二)

热门文章

  1. Delphi的程序单元结构
  2. Java - 抓取优酷网视频播放页面(使用jsoup解析html,正则表达式处理字符串)
  3. 详解数据仓库、数据湖、数据中台和湖仓一体
  4. 【无标题】Linux环境安装Nginx
  5. 模型融化(液化)特效(附带ASE节点图)
  6. application/json 和 application/x-www-form-urlencoded 有什么区别?
  7. 【新手向】仅需四步!搭建Minecraft云服务器
  8. Ubuntu18.04 ARM平台 Live555 交叉编译 live555共享库
  9. web前端框架开发的几种常用语言?
  10. 信息安全数学基础-素数模高次同余方程 2021-10-09