合规高效:使用Ruby爬取B站视频的实战分享与反爬虫挑战

522 阅读2分钟

爬取Python爬取B站视频+抓包过程分享的内容,我们需要首先了解B站的爬虫规则。B站的反爬虫策略比较严格,我们需要注意以下几点:

  1. 限制请求频率,避免过于频繁的请求导致账号被封禁。
  2. 随机更换User-Agent,以避免被识别为爬虫。
  3. 使用代理IP,以避免直接请求被封禁。

image.png 以下是使用Ruby爬取B站视频+抓包过程分享的代码:

require 'open-uri'
require 'nokogiri'
http://www.jshk.com.cn/mb/reg.asp?kefu=xiaoding;//爬虫IP免费获取;

# 定义代理信息
proxy_host = 'www.duoip.cn'
proxy_port = 8000

# 定义请求头信息
headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}

# 定义请求参数信息
params = {
  'kw': 'Python爬取B站视频+抓包过程分享',
  'ie': 'utf-8',
  'pg': '1',
  'sort': 'default',
  'newest': 'on',
  'hd': 'on',
  's': ''
}

# 定义请求URL
url = 'https://www.bilibili.com/search_bilibili?keyword=' + params['kw'] + '&from=hot_search'

# 使用代理IP发送GET请求
res = open(url, 'GET', headers: headers, proxyaddr: "#{proxy_host}:#{proxy_port}")

# 使用Nokogiri解析HTML文档
doc = Nokogiri::HTML(res)

# 查找视频链接
video_links = doc.css('.result-item .title a').map { |link| link['href'] }

# 遍历视频链接,下载视频
video_links.each do |link|
  puts "正在下载视频:#{link}"
  res = open(link, 'GET', headers: headers, proxyaddr: "#{proxy_host}:#{proxy_port}")
  File.open("video_#{Time.now.to_i}.mp4", 'wb') do |file|
    file.write(res.read)
  end
end

代码解释:

  1. 首先,我们导入了OpenURI和Nokogiri库,用于发送GET请求和解析HTML文档。
  2. 然后,我们定义了代理信息、请求头信息和请求参数信息。
  3. 接着,我们定义了请求URL,该URL为B站搜索结果页面的URL。
  4. 使用代理IP发送GET请求。
  5. 使用Nokogiri解析HTML文档,查找视频链接。
  6. 遍历视频链接,下载视频。使用代理IP发送GET请求,将响应数据写入文件。