結論から言うと、コードに誤りがある他、スクレイピングしているサイトに条件に一致する箇所がありません。
インデントが全て無くなっていますので、手元で復元しつつ実行してみたところ、文法エラーで実行できませんでした。
私の方で文法エラーを修正したコードは以下の通りです。
python
1import urllib.request
2from bs4 import BeautifulSoup
3
4class Scraper(object):
5 def __init__(self, site):
6 self.site = site
7
8 def scrape(self):
9 r = urllib.request.urlopen(self.site)
10 html = r.read().decode()
11 parser = "html.parser"
12 sp = BeautifulSoup(html, parser)
13 for tag in sp.find_all("a"):
14 url = tag.get("href")
15 if url is None:
16 continue
17 if "html" in url:
18 print("\n" + url)
19
20def main():
21 news = "https://yahoo.co.jp/"
22 scrapper = Scraper(news)
23 scrapper.scrape()
24
25if __name__ == "__main__":
26 main()
問題点は以下の通りでした。
- クラスのコンストラクタが
init
という誤った名前になっており、クラスの初期化ができなかった。正しくは__init__
。
- Scraperクラスのインスタンスを作成していない。
ただ、何も出力されなかった(つまり文法エラーすら出なかった)とのことですので、コピペミスか何かで手元ではただしく動作していたものと仮定し、処理の流れを確認してみました。
このコードはスクレイピングしたページから、htmlという文字列を含むリンクを全て抽出する処理をしています。news.google.comのソースを確認してみたところ、おそらく条件に一致する箇所がなかったため何も出力されなかったものと思われます(難読化されていて、完全に確認はできませんでした)。
試しにスクレイピング先をyahooに変えてみたところ、以下のような結果が得られました。
$ python nanikore.py
https://info-premium.yahoo.co.jp/promo/paypay/faq.html
https://about.yahoo.co.jp/docs/pr/disclaimer.html
$
おそらく問題なく動作したものと思われます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/31 13:54