あけましておめでとうございます。
今年もよろしくお願いいたします。
2020年もこれまでと変わらずに、ガンガン勉強してどんどん稼いでいきたいですね。
僕は現在、年末年始の長期休暇を利用して、ライバルブログ(WordPress)の記事を
自動抽出してくれるツールを作成中です。
言語は python で、ウェブスクレイピングで使用される
Request と Beautifulsoup を使用して作っています。
このツールが完成した暁には、無料レポートとかで配布したり、
メルマガ登録と特典として配布したり、を考えていますので
楽しみにしていてくださいね^^
で、今回 WordPress ブログから本文記事だけを抜き出そうとして
少しハマった個所があったため、備忘録として残しておきます。
似たようなツールを自作されている方には需要があると思ったので。
サイドバーやフッターの Hタグまで取得されてしまう問題
Request とBeautiful Soup を使って
特定のウェブサイトの情報を取得するコードについてはググればいくらでも出てきます。
例えば、H3タグをリストで取得したい場合は
以下のようなコードになると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 必要なモジュールをインポート import requests from bs4 import BeautifulSoup import lxml.html url = "https://ryoz001.com/1013.html" h3_list = [] response = requests.get(url) response.encoding = response.apparent_encoding # パース bs = BeautifulSoup(response.text, 'lxml') for i in bs.select("h3"): h3_list.append(i.getText()) |
でもこれだと、ブログ記事本文内の Hタグはもちろん取得できるのですが、
サイドバーやヘッダー、フッターに Hタグが存在していた場合、
それすらも取得されてしまいます。
そのため、取得したブログ情報をパースした際に、
記事本文のみが記載されている個所を抜き出してやり、
その中から Hタグを探し出すという段階が必要です。
|
|
記事本文の Hタグ のみを取得できるPythonコード
上記を実装する場合は、find メソッドを使った要素の検索を行います。
WordPress ブログでは、記事本文は
‘entry-content’ または ‘post-content’ の中に格納されているため、
こちらを指定して検索してやることで、記事本文のみを抜き出すことができます。
先ほどのコードを以下のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import requests from bs4 import BeautifulSoup import lxml.html url = "https://ryoz001.com/1013.html" h3_list = [] response = requests.get(url) response.encoding = response.apparent_encoding # パース bs = BeautifulSoup(response.text, 'lxml') # ★記事本文のみを抜き出す bs = bs.find(class_=['entry-content','post-content']) for i in bs.select("h3"): h3_list.append(i.getText()) |
こうすることで、無事欲しい Hタグのみを抜き出すことができました。
参考にしてみてください。
ではでは。
コメント