スクレイピングをできるサイトとできないサイトがあります。
例えばヤフーの記事一覧を取得するなら、
1、記事一覧の一番上の記事を検証し、css(xpath)を抜き出す
2、記事一覧の2番目の記事を検証し、css(xpath)を抜き出す
3、#topicsfb > div.topicsindex > ul.emphasis > li:nth-child(1) > a と#topicsfb > div.topicsindex > ul.emphasis > li:nth-child(1) > a
が出てきたとすると、共通部分だけを抜きだし、くり返し処理する。
つまり、この場合だと
nth-child(記事の順番)のところを抜き出し #topicsfb > div.topicsindex > ul.emphasis > li > aとする。(以下、実際のコード)
require "open-uri" require "nokogiri" url = "https://www.yahoo.co.jp/" user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36' charset = nil html = open(url, "User-Agent" => user_agent) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) doc.css('#topicsfb > div.topicsindex > ul.emphasis > li > a').each do |node| puts node.text end
この場合はうまく行ったのですが、
同様のやり方で、やってみるとできないサイトがあります。
(このサイトの記事は、#post-9999 > div > header > h2 > a 、#post-9998 > div > header > h2 > aなど、数字の部分が記事によってことなっていたため、#post> div > header > h2 > aとした。このサイトはこのやり方ではできませんでした。)
doc = Nokogiri::HTML.parse(html, nil, charset) doc.css('#post > div > header > h2 > a').each do |node| puts node.text end
この二つのサイトでは何がちがうのでしょうか?
もしくは、私のやり方に不備があるのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/30 12:53
2017/09/30 12:57