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

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

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

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

977閲覧

beautiful soupで属性の中身を取得してcsvで出力したい

coca0127

総合スコア10

スクレイピング

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/10 09:57

編集2020/02/10 09:58

前提・実現したいこと

Beautiful soupでhref属性の値を取得してCSVで出力したいのですがうまくいきません。
CSVの出力はできており、取得がうまくいっていないのだと思います。

発生している問題

sampleHTML
<a class="hoge" href="http://sample.com/url1.html">
<a class="hoge" href="http://sample.com/url2.html">
<a class="hoge" href="http://sample.com/url3.html">

import requests from bs4 import BeautifulSoup import pandas as pd from google.colab import files url = 'http://sample.com/' req = requests.get(url) soup= BeautifulSoup(req.content, 'html.parser') # aタグの中から、class=hogeの含まれたものを取得 tags = soup.find_all("a", {"class": "hoge"}) # データフレームを作成。 columns = ["link"] df = pd.DataFrame(columns=columns) # 抽出した要素を行列に入れ込む for tag in tags: link = tag.get("href") se = pd.Series([link], columns) print(se) df = df.append(se, columns) # CSVに出力 filename = "hogehoge.csv" # ファイル名の指定 df.to_csv(filename, encoding = 'utf-8') #csvへの変換、encoding指定(おまじない) files.download(filename) # ダウンロード

### 問題と思われる箇所

tags = soup.find_all("a", {"class": "hoge"})

for tag in tags:
link = tag.get("href")

試したこと

links = [link.get('href') for link in soup.find_all(class_='hoge')]
この形だと取得できたのですが、行列に入れ込むために書き換えると取得できなくなりました。
問題のコードではaタグも指定していますが、クラスとhref属性だけで取得できそうです。

補足情報(FW/ツールのバージョンなど)

google colaboratoryを使用しています

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

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

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

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

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

meg_

2020/02/10 10:33

「うまくいきません。」とは具体的にどうなったのでしょうか?
guest

回答1

0

自己解決

すみません、link、tags、tagとそれぞれが取得できているのか確認していたら
冒頭のbeautiful soupの初期化のあたりにエラーが出て、
そちらを書き換えたら出力できました

import requests
from bs4 import BeautifulSoup

url = "http://sample.com"
req = requests.get(url)
html = req.text
soup = BeautifulSoup(html, 'html.parser')

tags1 = soup.find_all(class_='hoge')

for tag1 in tags1:
link = tag1.get("href")

投稿2020/02/10 12:20

coca0127

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問