2016-12-22 11 views
1

"Company Name"、 "Company Type"フィールドをHTMLページから抽出する必要があります。私は次のコードを使用して会社名を抽出することができました:Beautiful Soup Pythonを使用して<span>からフィールドを抽出できません

ol1 = soup.find('ol') 
company_box = soup.find_all('span', attrs= {'class': 'company-name'}) 
for ol in ol1: 
    for c in company_box: 
     print c.text 

私は会社のタイプも抽出したいと思います。 「会社型」が「プライベート」の場合、「はい」を印刷し、そうでない場合は「いいえ」を印刷します。

私は会社の種類を抽出するたびに、空のフィールドを返します。コードブロックは次のとおりです。

for c in company_box: 
    print c.text 
    ptype_box = soup.find_all('span', attrs= {'class': 'company-type'}) 
    print ptype_box 

基本Webサイトはfortune.com/best-companiesです。助けてください !

+0

サンプル・ページを見てみると、何の '同社-type'が、ページ・ビュー・ソースのどこに存在しない//fortune.com/best-companies/ – mVChr

+0

'同社-type'がは拡大後に発見されますリスト全体。問題は、bs4がフルサイトを通過していないことです。 – ruaridhw

答えて

2

企業型を要素として取得することはできません。このサイトでは、データが動的に渡され、JavaScriptによって埋められます。会社の種類にアクセスしようとすると、それは空になります。

この場合、ウェブサイトはこのjsonデータを変数に格納しています。そのjsonデータをjson.loads()python関数で解析し、必要なすべてのデータ(会社名と型)を取得することができます。

私は会社名と会社名を取得するためのコードを書いています。また、json変数には他にもたくさんの情報があります。あなたがそれが役に立つと思っていますか?ます。http:

import requests 
import json 
from bs4 import BeautifulSoup 

r = requests.get('http://fortune.com/best-companies/') 

soup = BeautifulSoup(r.content,'lxml') 
data = soup.find_all("script")[-7].string 
data = data[39:-12] 
d = json.loads(data) 

filterd_data = d['bootstrap']['franchise']['filtered_sorted_data'] 

d = {} 
for i in range(100): 
    company_data = filterd_data[i]['companies'][0] 
    company_type = company_data['type'] 
    company_name = company_data['term']['name'] 
    d[company_name] = company_type 

print d 
関連する問題