前提・実現したいこと
scrapyの練習としてhttps://www.yahoo.co.jp/からYahooニュース記事タイトルをスクレイピングしようとしています。
方法はscrapyのsehllからコマンドを入力し、逐一結果を確認しています。
コマンド入力としては
scrapy shell https://www.yahoo.co.jp/
を入力後、
response.xpath('//*[@id="topicsfb"]/div[1]/ul[1]/li[1]/a/text()').extract()
を入力しています。
その結果が[]のみとなります。
私の考えでは、現在ですとニュースタブのニュース一番上の”5遺体発見「なぜ」住民に衝撃”が返ってくると想定しています。
しかしながら[]が返ってくる理由が分かりません。[]は一体何を表しているのでしょうか?
また、どのようにすればニュース一番上の文字のみをxpathを使って抽出することができるのでしょうか?
発生している問題・エラーメッセージ
>>> response.xpath('//*[@id="topicsfb"]/div[1]/ul[1]/li[1]/a/text()').extract()
[]
試したこと
ヤフーニュースのスクレイピングの前に練習としてscrapy公式ドキュメントで以下の要素取得には成功しています。
https://doc.scrapy.org/en/latest/topics/selectors.html
スクレイピング対象URL:https://doc.scrapy.org/en/latest/_static/selectors-sample1.html
(コマンド入力内容とその結果)
(myenv) C:\Users\user>scrapy shell https://doc.scrapy.org/en/latest/_static/sele
ctors-sample1.html
...
...
...
>>> response.xpath('//*[@id="images"]/a[2]')
[<Selector xpath='//*[@id="images"]/a[2]' data='<a href="image2.html">Name: My i
mage 2 <'>]
こちらのように欲しい要素を取得することはできています。またやり方としてグーグルクロームを使ってxpathでコピーしています。
xpathに問題が有ることも考えられません。
[]の結果になることを公式ドキュメント内でもその他の情報源からも探してみましたが、手がかりになるものを見つけることができませんでした。
4/11追記
ヤフーニュース(co.jp)のスクレイピングができませんと記しましたが、その後原因を調べるためにいろいろ試しました。その途中経過を記します。
teratailでメルカリのscrapyができないのでその結果を確認しました。結果は[]のみ(ヤフーニュースと同じ結果。)
ヤフーファイナンスで自動取得が禁止されているとのことでしたので確認しました。結果は指定した要素を取得できました。
私の考えでは、スクレイピングが禁止されている対象では、何らかの方法でscrapyが上手く起動せず[]のみ結果が吐き出されるのではないかと思っていましたが、それはないみたいです。
yahoo.comのニュースもスクレイピングしてみましたが[]のみの結果が吐き出されました。英文から原因を調べてみようと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/12 11:36