「class="toptopics_list" を持つ ul タグの子」で「href 属性が pickup を含む a タグ」でまず抜き出します。
href 属性が pickup を含むという条件がないと以下の記事でないリンクが入ってきてしまいます。
<a data-ylk="slk:more;" href="https://news.yahoo.co.jp/list/">もっと見る</a>
<a data-ylk="slk:allpcs;" href="https://news.yahoo.co.jp/topics">全カテゴリのトピックス一覧</a>
これで抽出した a タグは以下のようになっており、<span class="icNew">NEW</span>
や改行は不要なので、
<a data-ylk="slk:title;pos:1;" href="https://news.yahoo.co.jp/pickup/6307733">
日韓協議 レーダー照射提起へ
<span class="icNew">NEW</span>
</a>
stripped_strings という子孫ノードのテキストを返すジェネレーターの1つ目の要素を参照することでタイトルを抜き出します。
print(list(topic.stripped_strings))
# ['日韓協議 レーダー照射提起へ', 'NEW']
print(list(topic.stripped_strings)[0])
# '日韓協議 レーダー照射提起へ'
サンプルコード
python
1import re
2from pprint import pprint
3
4topics = soup.select('ul[class="toptopics_list"] a[href*="pickup"]')
5
6titles = []
7for topic in topics:
8 titles.append((list(topic.stripped_strings)[0], topic['href']))
9pprint(titles)
output
1[('日韓協議 レーダー照射提起へ', 'https://news.yahoo.co.jp/pickup/6307733'),
2 ('インドネシア津波 死者60人超', 'https://news.yahoo.co.jp/pickup/6307732'),
3 ('消防隊がEV閉じ込め 3人搬送', 'https://news.yahoo.co.jp/pickup/6307727'),
4 ('通勤ライナー 裏に熾烈な競争', 'https://news.yahoo.co.jp/pickup/6307738'),
5 ('携帯への苦情 半数は店舗販売', 'https://news.yahoo.co.jp/pickup/6307729'),
6 ('競馬の「二刀流」有馬Vなるか', 'https://news.yahoo.co.jp/pickup/6307740'),
7 ('広島菊池 MLBでは打力不足?', 'https://news.yahoo.co.jp/pickup/6307731'),
8 ('宇垣アナ 闇キャラ武器に転身', 'https://news.yahoo.co.jp/pickup/6307736')]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/23 07:04
2018/12/23 07:10
2018/12/23 14:34