2017-03-29 3 views
0

아래 코드를 사용하여 웹 사이트에서 일부 텍스트를 추출합니다. 나는 그것을 문자열 형태로 가지고있다.문자열을 파이썬의 팬더 데이터 프레임으로 변환

import requests 
URL = 'https://www.instituteforsupplymanagement.org/about/MediaRoom/newsreleasedetail.cfm?ItemNumber=30655&SSO=1' 
r = requests.get(URL) 
page = r.text 

from bs4 import BeautifulSoup 
soup = BeautifulSoup(page, 'lxml') 
import re 

strong_el = soup.find('strong',text='WHAT RESPONDENTS ARE SAYING …') 

ul_tag = strong_el.find_next_sibling('ul') 
LI_TAG ='' 
for li_tag in ul_tag.children: 

    LI_TAG += li_tag.string 

print LI_TAG 

2 개의 열로 데이터 프레임을 만들려고합니다. 1) 의견 2) 업계 (괄호 안에있는 하위 문자열). StringIO을 다음과 같이 사용하려고하면 오류가 발생합니다. 'TypeError : 데이터 인수가 반복자가 될 수 없습니다.' 어떻게 이러한 주석을 데이터 프레임으로 변환 할 수 있습니까?

import sys 
if sys.version_info[0] < 3: 
    from StringIO import StringIO 
else: 
    from io import StringIO 

import pandas as pd 

LI_TAG = StringIO(LI_TAG) 
df = pd.DataFrame(LI_TAG) 

답변

1

LI_TAG 변수는 긴 문자열 일뿐입니다. 따라서 데이터 프레임에 저장하기 위해이를 분할해야합니다.

import requests 
URL = 'https://www.instituteforsupplymanagement.org/about/MediaRoom/newsreleasedetail.cfm?ItemNumber=30655&SSO=1' 
r = requests.get(URL) 
page = r.text 

from bs4 import BeautifulSoup 
soup = BeautifulSoup(page, 'lxml') 
import re 

strong_el = soup.find('strong',text='WHAT RESPONDENTS ARE SAYING …') 

ul_tag = strong_el.find_next_sibling('ul') 
LI_TAG ='' 
for li_tag in ul_tag.children: 

    LI_TAG += li_tag.string 

# Convert to unicode to remove quotation marks \u201c and \u201d 
LI_TAG_U = unicode(LI_TAG) 
comments=[] 
industries=[] 
for string in LI_TAG.strip().split('\n'): 
    comment, industry = string.split(u'\u201d') 
    comments.append(comment.strip(u'\u201c')) 
    industries.append(industry.strip(' (').strip(')')) 

import pandas as pd 

data = pd.DataFrame() 

data['Comment']=comments 
data['Industry']=industries 

희망이 있습니다.

+0

comments = [], industries = []는 for 루프 뒤에 정의되었습니다. 그것을 바꿨습니다. 이제 작동합니다. 정말 고맙습니다. –

+0

죄송합니다. 다행이 당신을 위해 일 했어. – Robbie

관련 문제