2016-08-20 2 views
1

나는 보통 페이지에서 데이터를 추출하기 위해 파이썬이있는 아름다운 스프를 사용합니다. 나는 그들이 입력을 매우 비조직적 인 방법으로 집어 넣은 이상한 상황을 겪고 있습니다.매우 구조화되지 않은 웹 페이지에서 데이터 추출하기

이 페이지 소스의 검사에 http://dsalsrv02.uchicago.edu/cgi-bin/app/kadirvelu_query.py?page=2

이다, 나는 그것의이 방법

1) <a href="/cgi-bin/app/kadirvelu_query.py?qs=அகங்காரவிர்த்தி&searchhws=yes"><hw>அகங்காரவிர்த்தி</hw></a> akangkāravirtti (<a href="/cgi-bin/app/kadirvelu_query.py?page=2">p. 2</a>) நானென்னும்வடிவுஞானம். 
<br> 
2) <a href="/cgi-bin/app/kadirvelu_query.py?qs=அகங்காரான்ம ஞானம்&searchhws=yes"><hw>அகங்காரான்ம ஞானம்</hw></a> akangkārāṉm ஞானம் (<a href="/cgi-bin/app/kadirvelu_query.py?page=2">p. 2</a>) அகங்காரமேஆன்மாவெனக்கொள்ளும் அறிவு. 
<br> 

따라서 어떤 쿼리가

내 필요한 출력을 가져올 수없는

을 அகங்காரவிர்த்தி 저장된 것을 발견, 수리남,이것은 단지 단어, 영문 역어, 의미입니다.

은 현재 내가 깨진 형 출력

for a in soup.findAll('a'): 
     print >> f , a.text.encode('utf8') 

답변

1
을 얻기 위해 다음 코드를 사용하고

HTML은 w3c validator를 통해 실행 (들), 얻을 수있는 경고 (161) 오류, 82 끔찍한 준다 당신이 원하는 텍스트는 일을 조금 걸리지 만 이것은 당신이 원하는 것을 얻을해야합니다

from bs4 import BeautifulSoup 
import requests 

soup = BeautifulSoup(requests.get(url).content) 
strings = [[a.text.strip(), a.find_next_sibling(text=True).strip("() \n"), a.find_next("br").find_previous(text=True).strip("\n)")] for a in soup.select("a[href^=/cgi-bin/app/kadirvelu_query.py?qs=]")] 

당신에게주는 :

,
+0

고맙습니다. 데이터를 처리하는 데 사용할 수있는 출력을 한 줄로 얻을 수 있도록 작은 해킹을 수행했습니다. '문자열의 A, B, C의 경우 : 인쇄 >> F (. U "{}"형식 (a) 함수 .encode ('UTF8 ')), \t 인쇄 >> F (U "{ ("utf8 '))", "format", "format", "format (b) .encode ('utf8 ')), print >> f –

관련 문제