J'ai essayé de travailler sur le système de graphes deux fois auparavant, mais comme les données elles-mêmes étaient un peu subtiles, j'aimerais tracer la transition du nombre de vues de l'article posté sur Qiita en guise de revanche!
Aujourd'hui j'écris un code pour avoir le nombre de vues de l'article que j'ai posté sur Qiita
https://qiita.com/itaya/items/262eec85e36763497664
J'ai écrit une fois sur le grattage de Qiita dans l'article ci-dessus, donc je vais essentiellement l'utiliser.
crawler.rb
require 'nokogiri'
require 'mechanize'
require 'selenium-webdriver'
def selemium_init
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
# caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => { args: ["--user-agent=#{ua}", 'window-size=1280x800', '--incognito'] }) #Mode secret
caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {args: ["--headless","--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--user-agent=#{ua}", 'window-size=1280x800']})
client = Selenium::WebDriver::Remote::Http::Default.new
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps
end
driver = selemium_init
driver.navigate.to 'https://qiita.com/login'
driver.execute_script("document.getElementsByName('identity')[0].value = 'adresse mail'")
driver.execute_script("document.getElementsByName('password')[0].value = 'mot de passe'")
driver.execute_script("document.getElementsByName('commit')[0].click()")
sleep 1
Voici le code pour vous connecter.
À partir de là, cette fois, je vais obtenir une liste de mes pages et accéder à cette page pour obtenir une collection de vues
crawler.rb
driver.navigate.to 'https://qiita.com/itaya'
sleep 1
doc = Nokogiri::HTML.parse(driver.page_source, nil, 'utf-8')
doc.css('.AllArticleList__Item-mhtjc8-2').each do |div|
driver.navigate.to "https://qiita.com" + div.css('.AllArticleList__ItemBodyTitle-mhtjc8-6')[0]['href']
sleep 1
article_doc = Nokogiri::HTML.parse(driver.page_source, nil, 'utf-8')
p article_doc.css('.it-Header_pv')[0].text.split(" ")[0]
end
Je me sens comme cela.
Lorsque vous exécutez ceci
"99"
"56"
"218"
"212"
"120"
"107"
"288"
"112"
"213"
"93"
"111"
"128"
"131"
"149"
"383"
"801"
"4629"
"510"
"1086"
Vous pouvez ainsi obtenir le nombre de vues de l'article affiché sur la première page. Cependant, je ne peux pas obtenir le nombre de vues des articles de la deuxième page et des suivantes avec cela seul, alors j'aimerais faire cette partie demain ....
** * Veuillez noter que trop de requêtes submergeront le serveur !!! **
Vous pouvez utiliser l'API de Qiita normalement ... https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF
Note 14e jour affiché quotidiennement