Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 28, 2009 14:22:50

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup

вот код

# -*- coding: utf-8 -*-
import urllib2
import codecs
import csv
from BeautifulSoup import BeautifulSoup
import sys
streamWriter = codecs.lookup('utf-8')[-1]# это вроде как должно решить проблему по описанию в доках к BeautifulSoup
sys.stdout = streamWriter(sys.stdout)#но оно не решает

site_url = 'http://hotline.ua'
search_word = u'g900'
query_string = 'http://hotline.ua/sr/?q=%s&x=0&y=0'%search_word
page = urllib2.urlopen(query_string)

soup = BeautifulSoup(page)

search_result = soup.find("div", "t_search_results").findAll('a')
results = list()

spamWriter = csv.writer(open('c:\eggs.csv', 'w'), delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
for link in search_result:
page = urllib2.urlopen("%s%s"%(site_url,link['href']))
page_soup = BeautifulSoup(page)
spec_html = page_soup.find('table','specification')

if spec_html:

print spec_html.find('th')
print spec_html.find('td')

spamWriter.writerow([spec_html.find('th'), spec_html.find('td')])
и он даже рабочий =)
но вот беда BeautifulSoup бреабразовывает все в Unicode
и болучаются вот такой вот новый язык “РўРёРї экрана”
насколько я почитал Доки то проблема не в питоне и не в BeautifulSoup,а именно в том что я юзаю Windows
ах да родная кодировка сайта cp1251

а вот если переделать под другой сайт с нормальной кодировкой (utf-8) :
# -*- coding: utf-8 -*-
import urllib2
import codecs
import csv
from BeautifulSoup import BeautifulSoup

site_url = 'http://rozetka.com.ua/'
search_word = u'g900'
query_string = 'http://rozetka.com.ua/index.php?search_text=%s&imageField.x=0&imageField.y=0&page=search&lang=ru='%search_word

page = urllib2.urlopen(query_string)

soup = BeautifulSoup(page)

html = soup.prettify()
search_result = soup.find("div", "t_search_results").findAll('a')
results = list()

spamWriter = csv.writer(open('c:\eggs1.csv', 'w'), delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
for link in search_result:
rtf = ("%s%s"%(site_url,link['href']))
page = urllib2.urlopen(rtf)
page_soup = BeautifulSoup(page)
spec_html = page_soup.find('table','specification')

if spec_html:


print spec_html.find('dr')
print spec_html.find('b')

spamWriter.writerow([spec_html.find('br'), spec_html.find('b')])
то BeautifulSoup не может прочитать переменную soup = BeautifulSoup(page)
ерроер :
Traceback (most recent call last):
File “C:\parser\asd.py”, line 13, in <module>
soup = BeautifulSoup(page)
File “C:\Python26\lib\site-packages\BeautifulSoup.py”, line 1499, in __init__
BeautifulStoneSoup.__init__(self, *args, **kwargs)
File “C:\Python26\lib\site-packages\BeautifulSoup.py”, line 1230, in __init__
self._feed(isHTML=isHTML)
File “C:\Python26\lib\site-packages\BeautifulSoup.py”, line 1263, in _feed
self.builder.feed(markup)
File “C:\Python26\lib\HTMLParser.py”, line 108, in feed
self.goahead(0)
File “C:\Python26\lib\HTMLParser.py”, line 150, in goahead
k = self.parse_endtag(i)
File “C:\Python26\lib\HTMLParser.py”, line 314, in parse_endtag
self.error(“bad end tag: %r” % (rawdata,))
File “C:\Python26\lib\HTMLParser.py”, line 115, in error
raise HTMLParseError(message, self.getpos())
HTMLParser.HTMLParseError: bad end tag: u“</sc'+'ript>”, at line 85, column 112



Отредактировано (Дек. 28, 2009 14:25:28)

Офлайн

#2 Дек. 28, 2009 17:02:21

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup

BeautifulSoup на этом сайте неправильно определяет кодировку, он думает, что там windows-1252.

print soup.originalEncoding
# вывод: windows-1252
Тогда просто указывай ее принудительно
soup = BeautifulSoup(page, fromEncoding="windows-1251")



Отредактировано (Дек. 28, 2009 17:02:44)

Офлайн

#3 Дек. 28, 2009 23:03:24

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup

pasaranax
BeautifulSoup на этом сайте неправильно определяет кодировку, он думает, что там windows-1252.
Код:

print soup.originalEncoding
# вывод: windows-1252
Тогда просто указывай ее принудительно
Код:

soup = BeautifulSoup(page, fromEncoding=“windows-1251”)
к стати тут ты не прав…если повозится и проверить то сайт какраз в windows-1251, а проблема была в том что ВСЕ переменные BeautifulSoup хранятся в unicode , и для BeautifulSoup это отдельный тип(type) данных
с кодировкой я то разобрался =) ет не проблема
проблема теперь в том что второй вариант не прокатывает вообще …
там матюки на синтаксис в самом BeautifulSoup
sonniy
то BeautifulSoup не может прочитать переменную soup = BeautifulSoup(page)
то очем я и писал



Отредактировано (Дек. 28, 2009 23:07:43)

Офлайн

#4 Дек. 6, 2015 14:45:44

Ryo
Зарегистрирован: 2015-11-07
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup

Доброго времени суток! специалисты по BeautifulSoup, подскажите, пожалуйста!

Есть парсер форума. В процессе получаем некий BeautifulSoup.Tag, соответствующий, допустим, тексту HTML в духе:

<div class="post">
	Пацаны! <br /><br />
	Я реально рад вас всех видеть! <br />
	Зацените, как я играю в футбол:<br />
	<a href="http://aaa.su/dex.jpg>-прикрепленное изображение-</a>
</div>

Задача: получить из BeautifulSoup.Tag чистый HTML-текст всего, что находится между тэгами <div class=“post”> и </div>. Со всеми <br />, <a href… ссылками и прочим.

Спасибо.

Офлайн

#5 Дек. 6, 2015 15:01:00

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

BeautifulSoup

>>> import bs4
>>> markup = """
... <div class="post">
...     Пацаны! <br /><br />
...     Я реально рад вас всех видеть! <br />
...     Зацените, как я играю в футбол:<br />
...     <a href="http://aaa.su/dex.jpg>-прикрепленное изображение-</a>
... </div>"""
>>> soup = bs4.BeautifulSoup(markup)
>>> "".join([x.strip() if not isinstance(x, bs4.element.Tag) else str(x) for x in soup.find("div", class_="post").contents])
'Пацаны!<br/><br/>Я реально рад вас всех видеть!<br/>Зацените, как я играю в футбол:<br/><a href="http://aaa.su/dex.jpg&gt;-прикрепленное изображение-&lt;/a&gt;\n&lt;/div&gt;"></a>'

Отредактировано ayb (Дек. 6, 2015 15:31:48)

Офлайн

#6 Дек. 6, 2015 15:36:36

Ryo
Зарегистрирован: 2015-11-07
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup

Хмм… несколько в лоб, но в любом случае спасибо.
Я думал, может, что из встроенного есть.

Офлайн

#7 Дек. 6, 2015 16:33:38

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup

Ryo
Хмм… несколько в лоб, но в любом случае спасибо. Я думал, может, что из встроенного есть.
soup.div.get_text()

Офлайн

#8 Дек. 6, 2015 17:33:11

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

BeautifulSoup

kampella
soup.div.get_text()
Ryo
Со всеми <br />, <a href… ссылками и прочим.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version