关键词:
# _*_ coding: utf-8 _*_
require './main/crawler/base/movie-crawler.rb'
class YouTubeCrawler < MovieCrawler
def initialize()
@site_url = "https://www.youtube.com/"
@keywords = [
"子育て 1歳",
"離乳食",
]
end
def crawl_movie(keyword)
movie_site_datas = []
# Step 2 Set parenting word to search box
find(:xpath, '//*[@id="masthead-search-term"]').set(keyword)
# Step 3 Click search button
find(:xpath, '//*[@id="search-btn"]').click
# # Step 4 Filter to Today
# find(:xpath, '//*[@id="content"]/div/div/div/div[1]/div/div[2]/div[1]/div[1]/div/div[1]/button').click
# find(:xpath, '//*[@id="filter-dropdown"]/div[1]/ul/li[2]/a').click
# Step 5 Sort with upload date
sleep 1
find(:xpath, '//*[@id="content"]/div/div/div/div[1]/div/div[2]/div[1]/div[1]/div/div[1]/button').click
sleep 1
find(:xpath, '//*[@id="filter-dropdown"]/div[5]/ul/li[2]/a').click
# Step 6 navigate to movie page
# all(:xpath, '//*[contains(@id, "item-section-")]/li/div/div').each do |movie_element|
# sleep 1
# @url = movie_element.find(:xpath, 'div//h3[contains(@class, "yt-lockup-title ")]/a')[:href]
# puts "url => #@url"
# movie_element.find(:xpath, 'div//h3[contains(@class, "yt-lockup-title ")]/a').click
# end
sleep 1
urls = []
all(:xpath, '//*[contains(@id, "item-section-")]/li/div/div').each do |movie_element|
urls << movie_element.find(:xpath, 'div//h3[contains(@class, "yt-lockup-title ")]/a')[:href]
end
urls.each do |url|
# Step 7 Get metadata
visit(url)
sleep 1
title = find(:xpath, '//*[@id="eow-title"]')[:title]
description = find(:xpath, '//*[@id="eow-description"]').text if has_selector?(:xpath, '//*[@id="eow-description"]')
tags = []
release_date = find(:xpath, '//*[@id="watch-uploader-info"]/strong').text
view_count = find(:xpath, '//*[@id="watch7-views-info"]/div[1]').text
like_count = find(:xpath, '//*[@id="watch8-sentiment-actions"]/span/span[1]/button/span').text if has_selector?(:xpath, '//*[@id="watch8-sentiment-actions"]/span/span[1]/button/span')
dislike_count = find(:xpath, '//*[@id="watch8-sentiment-actions"]/span/span[3]/button/span').text if has_selector?(:xpath, '//*[@id="watch8-sentiment-actions"]/span/span[3]/button/span')
comments = ""
thumbnail = ""
movie_site_data = MovieSiteData.new(
url: url,
title: title,
description: description,
tags: tags,
release_date: release_date,
view_count: view_count,
like_count: like_count,
dislike_count: dislike_count,
comments: comments,
thumbnail: thumbnail)
movie_site_datas.push(movie_site_data)
end
return movie_site_datas
end
def creansing_movie(crawler_data)
# title
if crawler_data.title.include?("猫") || crawler_data.title.include?("犬")
puts "#Time.new() : Skip #crawler_data.url this title include 猫, 犬"
return nil
end
# description
crawler_data.description = "説明なし" if crawler_data.description.nil?
if crawler_data.description.include?("猫") || crawler_data.description.include?("犬")
puts "#Time.new() : Skip #crawler_data.url this description include 猫, 犬"
return nil
end
# release_date
# 2015/01/01 に公開
crawler_data.release_date.slice!(" に公開")
# view_count
# 視聴回数 28 回
if match = crawler_data.view_count.match(/視聴回数 ([0-9]+) 回/)
crawler_data.view_count = match[1]
end
# like_count
crawler_data.like_count = "0" if crawler_data.like_count.nil?
# dislike_count
crawler_data.dislike_count = "0" if crawler_data.dislike_count.nil?
return crawler_data
end
end
textphpstorm键-于2020年1月9日到期(代码片段)
查看详情
vbscript有用的宏观:[2015年1月20日](代码片段)
查看详情
2017年9月14日
今天休息,看了一下表单<input>文本:placeholder="提示语" maxlength="最大可输入长度"密码:password单选:<label></label> 默认选择器:checked="checked"多选:默认选择器:checked="checked"文件上传:file隐藏:hidden提交:su 查看详情
2018年4月14日笔记(代码片段)
函数关键字def 函数声明return 返回值pass 略过,啥也不干exit(1) 直接退出 高阶函数:可接收另一个函数作为参数的函数常用的高阶函数有:map()reduce()filter()sorted() ->最常用 map()函数:接收两个参数,一... 查看详情
sql针对kklw的mysql培训数据-2018年9月21日(代码片段)
查看详情
2019年9月14日(数论专题考试)
汗~,差点爆零(QwQ)……(prob2:saber)(upd):题意以后都不写了,反正写了日期,去文件里找。题目数学?可惜我开始跑的是暴力……思路肯定是总方案减去不合法方案,那么就有两种主流思路:暴力30分,因为不合法情况是且仅是要... 查看详情
leetcode周赛2021年5月9日(代码片段)
太久不写代码了第一次有空做LeetCode周赛不是下标越界就是暴力超时或者是明明很简单的题目就是懒得写比较麻烦就不动手看别人的分享学习一下第一题活着的人最多的年份classSolutionpublic:intyr[3000];intmaximumPopulation(vector<vector<... 查看详情
54gomod使用——2020年07月11日15:46:14(代码片段)
54、gomod使用——2020年07月11日15:46:141、前提简介github很多使用go的项目都是使用gomod集成库的,很多库也都是github上的项目。但是现在国内下载这些资源都比较不容易。我们需要配置一些配置才可以。之前一直觉得go对国内用户太... 查看详情
2015_bt2星系炸弹(代码片段)
星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。每个炸弹都可以设定多少天之后爆炸。比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。有一个贝塔... 查看详情
2015_bt2星系炸弹(代码片段)
星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。每个炸弹都可以设定多少天之后爆炸。比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。有一个贝塔... 查看详情
java示例代码_在oracle查询结果中获取2011年9月15日这样的日期,而不是2011年9月15日00:00:00
java示例代码_在oracle查询结果中获取2011年9月15日这样的日期,而不是2011年9月15日00:00:00 查看详情
[转帖]chrome浏览器历史版本(代码片段)
微软马上就终止支持win7了但是据说google还要继续支持18个月.现在chrome的版本时78估计chrome在win7上面最终支持的版本回事chrome90如下面试winxpgoogle与2016年4月份停止支持时候chrome49的版本.https://www.cnblogs.com/snailrunning/p/9136672.html&n... 查看详情
2018年5月3日笔记(代码片段)
常用的正则表达式匹配规则\d 表示一个数字字符,等价于[0-9]\D 表示一个非数字字符,等价于[^\d]\s 表示一个空白字符,等价于[<空格>\t\r\n\f\v]\S 表示一个非空白字符,等价于[^\s]\w 表示一个单词字符(数字... 查看详情
2020年3月14日bapc2019比赛补题报告(代码片段)
...和 与 后缀和, 扫描一次数组,即可求出最大值代码:n=int(input())lst=[*map(int,input().split())]#left记录数组元素平方的前缀和,right记录数组元素后缀和left,right=0,sum(lst)res=0foriinlst:left+=i**2right-=ires=max(res,left*right)print(res) 查看详情
2018年9月28日函数part4多个装饰器和迭代器(代码片段)
一、多个装饰器1、当一个被装饰的对象同时叠加多个装饰器时规则:(1)装饰器的加载顺序是:自下而上(2)装饰器内wrapper函数的执行顺序是:自上而下importtimedeftimmer(func):#func=wrapper2的内存地址defwrapper1(*args,**kwargs):print(‘===... 查看详情
放假6天干啥
参考技术A提起日历表2022日历全年,大家都知道,有人问日历2022年假期表,另外,还有人想问假期安排2022法定节假日日历,你知道这是怎么回事?其实放假安排2022年日历,下面就一起来看看日历年假期表,希望能够帮助到大家... 查看详情
php将xx/xx/xxxx转换为详细日期的小日期功能(例如“2015年1月11日”)(代码片段)
查看详情
如何将 OpenSSL 版本 1.0.1 2014 年 3 月 14 日更新为以 1.0.1h、1.0.0m 和 0.9.8za 开头的 OpenSSL 版本?
...oOpenSSLversionsbeginningwith1.0.1h,1.0.0m,and0.9.8za?【发布时间】:2015-09-1316:23:07【问题描述】:我在窗口7上使用eclipse(Luna) 查看详情