我必须从HTML页面中提取“公司名称”,“公司类型”字段。我已经能够使用以下代码提取公司名称:
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
基础网站是fortune.com/best-companies。请帮忙!
答案 0 :(得分:1)
我们不能将公司类型作为元素。在此站点中,数据通过javascript动态传递和填充。因此,当我们尝试访问公司类型时,它将为空。
在这种情况下,网站将此json数据存储在变量中。所以我们可以使用json.loads()python函数解析json数据并获取所有必需的数据(即公司名称和类型)。
我已经编写了获取公司名称和公司类型的代码。此外,json变量中还有许多其他信息可供查看。希望你觉得它有用。
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