質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

11410閲覧

BeautifulSoupで複数条件を指定する方法

YOSHITAKEH

総合スコア21

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/07 12:55

※Pythonの初心者で、ウェブスクレイピングの勉強中に起きた問題です。質問情報の不足がございましたら、ご教授くださいませ。

前提・実現したいこと

特定のURLのウェブスクレイピングの際に、複数条件を指定して、1行にまとめたいです。

URL:https://nekochan.jp/cat/category/i-want-a-cat

HTML

1<div class="post_loop"> 2<div class="post_loop_item "> 3 <a href="https://nekochan.jp/cat/article/5459"> 4 <figure> 5 <img src="https://cdn.wanchan.jp/c/nekochan.jp/pro/crop/120x120/center/2/eed8f70e8012c6b87d44418302f9dcb8.jpg" alt="一人暮らしでも飼いやすい猫の種類8つ、飼う前に確認する事"> 6 </figure> 7 <div class="post_loop_info"> 8 <div class="post_title"> 9 一人暮らしでも飼いやすい猫の種類8つ、飼う前に確認する事 </div> 10 <div class="bottom"> 11 <p class="post_pre_title">一人暮らしで猫を飼おうかと、悩んでいる人におすすめな猫の種類を紹介します。一人暮らしで猫を飼うにはそれなりの覚悟も必要になってきます。飼う前に必要な事は、猫の種類だけで…</p> 12 <div class="view">217 view</div> 13 <div class="writer">JIN</div> 14 </div> 15 </div> 16 </a> 17 </div> 18<div class="post_loop_item "> 19<div class="post_loop_item "> 20<div class="post_loop_item "> 21<div class="post_loop_item ">

希望する出力結果

このHTMLソースファイルの、"post_title"と"URL"と"VIEW"だけを抜き取って、リスト化したいです。
記事1〜3があるとしたら、

1.post_title:url:view数
2.post_title:url:view数
3.post_title:url:view数

のようなリストが作りたいです。最終的にはCSVファイルで保存したいです。

(記事1の例)
一人暮らしでも飼いやすい猫の種類8つ、飼う前に確認する事:https://nekochan.jp/cat/article/5459:217

問題点

1.無駄な空白が出てきてしまう(出力結果の記事タイトルの前後)ので、削除したい
2.authorなど不要な条件を指定する方法が分からない
3.print()ではなくて、CSVに保存する方法がわかりません。

何卒、宜しくお願いいたします。

該当のソースコード

python

1import requests 2from bs4 import BeautifulSoup 3 4r = requests.get("https://nekochan.jp/cat/category/i-want-a-cat") 5 6 7links = soup.find(class_="post_loop").find_all('a') 8for link in links: 9 if 'href' in link.attrs: 10 print(link.text,':',link.attrs['href'])

出力結果

※最初の一行だけ抜粋しています。

一人暮らしでも飼いやすい猫の種類8つ、飼う前に確認する事 一人暮らしで猫を飼おうかと、悩んでいる人におすすめな猫の種類を紹介します。一人暮らしで猫を飼うにはそれなりの覚悟も必要になってきます。飼う前に必要な事は、猫の種類だけで… 69 view JIN : https://nekochan.jp/cat/article/5459

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

以下のようにやってみました。

  • Pythonのソースコード内では print() を使い、実行時にファイルにリダイレクトすることでCSVファイルを作成

  • スクリプトの作成中、頻繁に対象サイトにアクセスしないよう、解析対象のページをダウンロードして、index.html というHTMLファイルに保存してこれを解析対象とする。

以下はスクリプトの内容と実行ログです。

(teratail) [jun68ykt@macmini q150619]$ date

2018年 10月 7日 日曜日 23時02分55秒 JST
(teratail) [jun68ykt@macmini q150619]$ python -V
Python 3.7.0
(teratail) [jun68ykt@macmini q150619]$ head index.html

html

1<!doctype html> 2<html><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#"> 3<meta charset="utf-8"> 4<meta http-equiv="X-UA-Compatible" content="IE=edge"> 5<title>猫を飼う準備のまとめ</title> 6 7<link rel="canonical" href="https://nekochan.jp/cat/category/i-want-a-cat"> 8 9<link rel="next" href="https://nekochan.jp/cat/category/i-want-a-cat?rows=2" /> 10<meta name="description" content="猫を飼うときに準備しておきたいものや、猫を迎え入れる先など、非常に悩まれるかと思います。そもそもどうやって猫を飼えばいいのか、猫を飼うには何が必要なのか、猫を飼うということはどういうことなのかなど、何もわからない方も多いかと思います。このページでは、猫を飼う前に準備したいものや、猫の選び方、猫のお迎え先(ペットショップや里親などの選択肢)などの情報まとまっていますのでぜひ参考にしてみてください。">

(teratail) [jun68ykt@macmini q150619]$ cat scraping.py

python

1from bs4 import BeautifulSoup 2 3path = './index.html' 4 5with open(path) as f: 6 soup = BeautifulSoup(f.read(), 'html.parser') 7 links = soup.find(class_='post_loop').find_all('a') 8 for link in links: 9 if 'href' in link.attrs: 10 title = link.find(class_='post_title').find(text=True).strip() 11 view = link.find(class_='view').find(text=True).strip().split()[0] 12 print(','.join([title, link['href'], view])) 13

(teratail) [jun68ykt@macmini q150619]$ python scraping.py > data.csv

(teratail) [jun68ykt@macmini q150619]$ cat data.csv

text

1一人暮らしでも飼いやすい猫の種類8つ、飼う前に確認する事,https://nekochan.jp/cat/article/5459,309 2うっとりしてる?猫がリラックスできる音楽を検証してみました,https://nekochan.jp/cat/article/5424,726 33か月の猫の大きさや育て方、おすすめ商品,https://nekochan.jp/cat/article/5396,868 4焼けるようなコンクリートの上でアリがたかり命の危機だった子…,https://nekochan.jp/cat/article/5421,4665 5ノラ猫を拾ったら?飼い方や注意する事,https://nekochan.jp/cat/article/5433,1006 6猫のためにはフローリングとカーペットどちらがいい?,https://nekochan.jp/cat/article/3965,1598 7猫を飼う前と飼った後で変わった『5つ』の事,https://nekochan.jp/cat/article/3783,3191 8犬がいるお家で猫をお迎えする時の3つのチェックポイント,https://nekochan.jp/cat/article/5118,1178 9猫の出産ラッシュ…自分でお世話できないのであれば拾わないで!,https://nekochan.jp/cat/article/5268,24116 10室内飼いしている猫同士でも縄張りはある?一緒に暮らす時注意…,https://nekochan.jp/cat/article/4551,1263 11猫の室内飼いはストレスを感じる?快適に暮らせるための4つの…,https://nekochan.jp/cat/article/5219,2894 12好きな食べ物から猫の『名前』を付けてみよう!,https://nekochan.jp/cat/article/4946,1307 13人を信用しない猫にはどう接してあげるべき?,https://nekochan.jp/cat/article/5209,2430 14保護猫のトライアル期間チェックしたい4つのこと,https://nekochan.jp/cat/article/5166,1365 15子猫を助けて愛護管理センターに連れて行ったら殺処分の危機?!,https://nekochan.jp/cat/article/5095,3126

(teratail) [jun68ykt@macmini q150619]$

以上、参考になれば幸いです。

投稿2018/10/07 14:16

編集2018/10/07 14:22
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YOSHITAKEH

2018/10/07 14:23

jun68yktさま、ご回答ありがとうございました。早速、実行して、無事に解決できました。本当にありがとうございました。
jun68ykt

2018/10/07 20:21

解決されたとのことで、よかったです!
guest

0

python

1import csv 2import requests 3from bs4 import BeautifulSoup 4 5url = 'https://nekochan.jp/cat/category/i-want-a-cat' 6 7r = requests.get(url) 8 9if r.status_code == requests.codes.ok: 10 11 soup = BeautifulSoup(r.content, 'html.parser') 12 13 with open('result.csv', 'w') as fw: 14 15 writer = csv.writer(fw, dialect='excel', lineterminator='\n') 16 17 for items in soup.select('div.post_loop_item > a'): 18 19 link = items.get('href') 20 title = items.select_one('div.post_title').get_text(strip=True) 21 view, _ = items.select_one('div.view').get_text(strip=True).split() 22 23 writer.writerow([title, link, view])
  1. 無駄な空白が出てきてしまう(出力結果の記事タイトルの前後)ので、削除したい

.get_text(strip=True)で前後の空白文字を除去できます

2.authorなど不要な条件を指定する方法が分からない
必要なところだけ選べばいいので不要なところは選ばなければいいだけなのでは

3.print()ではなくて、CSVに保存する方法がわかりません。
https://docs.python.org/ja/3/library/csv.html

投稿2018/10/08 07:33

barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YOSHITAKEH

2018/10/08 14:54

ご回答ありがとうございます。 1.のご回答の通りにやって前後の空白文字が消えました。大変助かりました。また質問させていただくことがあるかと思いますが、宜しくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問