#はじめに
##前回のおさらい
【初心者向け】PythonでWebスクレイピングをやってみるの記事の続きになります。
前回は、日経ビジネス電子版
https://business.nikkei.com/
から、新着記事の見出しとURLを取得しました。
しかし、これだけでは、実際にこのURLにアクセスすれば知る事ができます。
##今回の目的
ニュースサイトを閲覧した際に、気になったニュースがあればクリックをして、詳細な内容を閲覧すると思います。
日経ビジネスの記事には、全てのニュースでは無いのですが、内容の前に読みたいと思わせるような150文字程度の記事紹介文があります。
この内容も一緒に表示する事で、記事を読むか読まないかの判断材料にします。
いちいち全ての記事にアクセスして、記事の紹介文を読むのは大変です。
Webスクレイピングの良さを、引き出していきます。
##前回のコードのおさらい
import requests
from bs4 import BeautifulSoup
import re
urlName = "https://business.nikkei.com"
url = requests.get(urlName)
soup = BeautifulSoup(url.content, "html.parser")
elems = soup.find_all("span")
for elem in elems:
try:
string = elem.get("class").pop(0)
if string in "category":
print(elem.string)
title = elem.find_next_sibling("h3")
print(title.text.replace('\n',''))
r = elem.find_previous('a')
#記事のURLを取得している
print(urlName + r.get('href'), '\n')
#この部分にURL先の記事紹介文を取得するプログラムを書く
except:
pass
詳しくは、前回の記事を参照してください。
ニュースをクリックした際に、遷移するURLを表示して前回は終わりました。今回は、そのURLにアクセスして内容を取得します。
#プログラミング
まず初めに、今回はrequestsとBeautifulSoupの部分を関数にします。
import requests
from bs4 import BeautifulSoup
def setup(url):
url = requests.get(url)
soup = BeautifulSoup(url.content, "html.parser")
return url, soup
import re
import subFunc
urlName = "https://business.nikkei.com"
url, soup = subFunc.setup(urlName)
elems= soup.find_all("span")
for elem in elems:
try:
string = elem.get("class").pop(0)
if string in "category":
print('\n', elem.string)
title = elem.find_next_sibling("h3")
print(title.text.replace('\n',''))
r = elem.find_previous('a')
nextPage = urlName + r.get('href')
print(nextPage)
#ここから新しく記述した部分
nextUrl, nextSoup = subFunc.setup(nextPage)
abst = nextSoup.find('p', class_="bplead")
if len(abst) != 0:
print(abst.get_text().replace('\n',''))
except:
pass
正直、やる事は変わりません。
遷移先のURLを、requestsとBeautifulSoupを使って情報を取得します。
記事の紹介文は、classがbpleadの要素にありました。しかし、紹介文が無い記事もあるので、あった場合に表示するようにしました。
実行結果は以下の通りです。(省略しています)
共創/競争・スタートアップ
新型コロナは長期戦 xxxxxxxxxxx
https://business.nikkei.com/atcl/gen/19/00101/040100009/
新型コロナウイルスの流行xxxxxxxxxxxxと訴えた。
#さいごに
調べてみると、他の方法もいくつか紹介されていますが、簡単な方法で遷移先の内容を取得してみました。