2015-12-08 4 views
2

Я читал здесь несколько сообщений об этом, но я очень новичок в Python в целом, поэтому я надеялся получить дополнительную информацию.Скребок в Python с BeautifulSoup

По существу, я пытаюсь написать что-то, что вытащит определения слов с сайта и напишет их в файл. Я использую BeautifulSoup, и я сделал довольно некоторый прогресс, но вот мой вопрос -

from __future__ import print_function 
import requests 
import urllib2, urllib 
from BeautifulSoup import BeautifulSoup 

wordlist = open('test.txt', 'a') 

word = raw_input('Paste your word ') 

url = 'http://services.aonaware.com/DictService/Default.aspx?action=define&dict=wn&query=%s' % word 

# print url 

html = urllib.urlopen(url).read() 
# print html 
soup = BeautifulSoup(html) 
visible_text = soup.find('pre')(text=True) 

print(visible_text, file=wordlist) 

это кажется тянуть то, что мне нужно, но ставит его в этом формате

[u'passable\n  adj 1: able to be passed or traversed or crossed; "the road is\n   passable" 

но Мне нужно, чтобы это было открыто. Я пробовал использовать дезинфицирующее средство (я запускал его через отбеливатель, но это не сработало. Я прочитал некоторые другие ответы здесь, но они не объясняют, КАК работает код, и я не хочу чтобы добавить что-то, если я не понимаю, как это работает

есть ли способ, чтобы просто вытащить открытого текста

редактировать:.? Я закончил тем, что делал

from __future__ import print_function 
import requests 
import urllib2, urllib 
from bs4 import BeautifulSoup 

wordlist = open('test.txt', 'a') 

word = raw_input('Paste your word ') 

url = 'http://services.aonaware.com/DictService/Default.aspx?action=define&dict=wn&query=%s' % word 

# print url 

html = urllib.urlopen(url).read() 
# print html 
soup = BeautifulSoup(html) 
visible_text = soup.find('pre')(text=True)[0] 

print(visible_text, file=wordlist) 
+0

Так что выход вы на самом деле хотите? Это список строк в Юникоде. Если вы хотите, вы можете сказать: «для temp в visible_text: print (temp)» в качестве вашей последней строки. –

+0

Или «для temp в visible_text: print (temp.strip())» –

+0

попытайтесь удалить символы, которые не хотят взгляните на [http://stackoverflow.com/questions/5843518/remove-all-special- characters-punctuation-and-spaces-from-string] (http://stackoverflow.com/questions/5843518/remove-all-special-characters-punctuation-and-spaces-from-string) и [http: // stackoverflow .com/вопросы/1038824/как-делать-я-удалить-а-подстроку-из-отслуживших в струне-в-питон] (http://stackoverflow.com/questions/1038824/how- do-i-remove-a-substring-from-the-end-of-a-string-in-python) – r3v3r53

ответ

1

код уже дает вам plaintext, это просто имеет некоторые символы, закодированные как entity references. В этом случае специальных символов, которые составляют часть синтаксиса XML/HTML, кодируются, чтобы предотвратить их нарушение структуры текста.

Чтобы расшифровать их, используйте HTMLParser модуль:

import HTMLParser 
h = HTMLParser.HTMLParser() 

h.unescape('"the road is passable"') 
>>> u'"the road is passable"' 
Смежные вопросы