2017-07-16 25 views
2

IG IndexページからPython Beautiful Soupを使用してティッカー(南アフリカ40)フィールドを抽出しようとしていますが、取得できません。Python Beautiful Soupを使用したWebスクレイピングデータフィールドを抽出できません

私はティッカーデータでhttps://www.ig.com/uk/ig-indices/south-africa-40?siteId=igm

HTMLコードであるからデータを取得しようとしていますWebページ:私はこれを試してみました

<div class="ma-content title"> 
    <h1>South Africa 40</h1> 

     <p> 
      .........some text.......... 
     </p> 

</div> 

name = soup.select('div.ma-content title h1')[0].text 

が、エラーメッセージが表示されます:

Traceback (most recent call last): File "IGIndexDataScrape_Minute_v0.1.py", line 30, in name = soup.select('div.ma-content title h1')[0].text IndexError: list index out of range

上記のアドバイスやコードの修正は本当に役に立ちます。ここで

はストレートコピー&ペーストのための完全なコードです:

import urllib2 
from bs4 import BeautifulSoup 

import csv 
from datetime import datetime 

from lxml import html 
import requests 

quote_page = ['https://www.ig.com/uk/ig-indices/south-africa-40?siteId=igm'] 

data = [] 
for pg in quote_page: 
page = urllib2.urlopen(pg) 

soup = BeautifulSoup(page, 'html.parser') 

name = soup.select('div.ma-content title h1')[0].text 

sell_price = soup.find('span', attrs={'class':'price', 'id':'bid'}).text 
data.append(sell_price) 

buy_price = soup.find('span', attrs={'class':'price', 'id':'ofr'}).text 
data.append(buy_price) 

print sell_price + "\t\t" + buy_price + name 

# data.append(name, sell_price, buy_price) 
# print name + "\t\t" + sell_price + "\t\t" + buy_price 
+1

あなたの投稿を編集し、適切にコードをフォーマットしてください:https://stackoverflow.com/editing-help#code –

+0

CSSが間違っています。 'div.ma-content.title'または' div.title'のようにしてください – pguardiario

答えて

2

あなたはfind_all代わりのselectを試したことがありますか?ような何か:

name_div = soup.find_all('div', {'class': 'ma-content title'})[0] 
name = name_div.find('h1').text 
+0

これは確実に動作しますが、あなたは '}';を忘れてしまったと思います) – hansTheFranz

+0

@hansTheFranzありがとう、私はそれを編集しました。 :) –

+0

ありがとう。上記の解決策が働きます。 :) – manjeetss

関連する問題