2016-11-26 3 views
0

나는 파이썬 &에 익숙해 져서 BeautifulSoup, Python으로 아래 작업을하고있다.문자열을 찾고 파이썬에서 stdout으로 반환하는 방법

이 예상된다 무엇 : 스크립트의 출력은 아래의 문자열 5378이 포함 된 경우

*, 그것은 문자열이 나타나는 선으로 나에게 이메일을 보내해야합니다.

#! /usr/bin/env python 

from bs4 import BeautifulSoup 
from lxml import html 
import urllib2,re 

import codecs 
import sys 
streamWriter = codecs.lookup('utf-8')[-1] 
sys.stdout = streamWriter(sys.stdout) 

BASE_URL = "http://outlet.us.dell.com/ARBOnlineSales/Online/InventorySearch.aspx?c=us&cs=22&l=en&s=dfh&brandid=2201&fid=111162" 

webpage = urllib2.urlopen(BASE_URL) 
soup = BeautifulSoup(webpage.read(), "lxml") 
findcolumn = soup.find("div", {"id": "itemheader-FN"}) 
name = findcolumn.text.strip() 
print name 

나는 findall(5378, name)를 사용하여 시도하지만,이 [] 같은 괄호를 비워 반환합니다.

  • grep과 함께 사용하려고하면 유니 코드 문제로 고민하고 있습니다.

$ python dell.py | grep 5378 Traceback (most recent call last): File "dell.py", line 18, in <module> print name UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 817: ordinal not in range(128)

사람은 내가 두 경우 모두 잘못 뭐하는 거지 말씀해 주시겠습니까?

+0

어떤 운영 체제 및 버전이 있습니까? – chrki

+0

파이핑을 사용할 때'print'는 어떤 인코딩을 사용하는지 알지 못하기 때문에 스스로 인코딩해야합니다. 'print name.encode ('utf-8')' – furas

+0

check in doc - 잘 모르겠지만'findall'는 태그 이름을 첫 번째 인자로 생각합니다. '5378'은 태그 이름이 아닙니다. – furas

답변

1

(re 모듈의) 함수 findall은 첫 번째 매개 변수가 문자열 인 정규 표현식을 기대하지만 정수를 제공했습니다. 대신이 시도 :

re.findall("5378", name) 
뭔가를 발견했을 때이 출력됩니다 [u'5378'] 인쇄

또는 [] 그렇지했을 때.

번호에서 제품 이름을 검색하려는 것 같습니다. 즉, findcolumn의 요소를 반복해야합니다. 여기서 re.search()을 사용하여 요소 텍스트 내에서 일치하는 항목이 있는지 확인할 수 있습니다. Reconfigure your system locale on Ubuntu 또는 Encode your script output with .encode()/unicode() :

for input_element in findcolumn.find_all("div"): 
    name = unicode(input_element.text.strip()) 
    if re.search("5378", name) != None: 
     print unicode(name) 

는 유니 코드 오류에 관해서는, 운영 체제 및 구성에 따라 솔루션의 무리가 있습니다.

+0

Ty. OS 수준에서 인코딩을 설정했습니다. 그것은 작동합니다! 실행했을 때,'[u'5378 ']'하지만''[u'5378']'대신에 전체 행이 인쇄되기를 원합니다. 어떻게해야합니까? – deppfx

+0

@deppfx 나는 나의 대답을 편집했다 – chrki

+0

그것은 일한다, 고마워! findcolumn = soup.find ("div", { "id": "itemheader-name")에서 이미 findcolumn.find_all ("div") :'및'findcolumn'을 다시 실행해야하는 이유는 무엇입니까? FN "}))'? 그래서, 나는 find_column에 대해'input_element를 시도했다 :'이 오류를 받고 있는데,이 오류를 받고있다.'AttributeError : 'NavigableString'객체에는 'text'속성이 없다. 설명해 주시겠습니까? – deppfx