Найти - Пользователи
Полная версия: BeautifulSoup
Начало » Python для новичков » BeautifulSoup
1
sonniy
вот код
# -*- 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
pasaranax
BeautifulSoup на этом сайте неправильно определяет кодировку, он думает, что там windows-1252.
print soup.originalEncoding
# вывод: windows-1252
Тогда просто указывай ее принудительно
soup = BeautifulSoup(page, fromEncoding="windows-1251")
sonniy
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)
то очем я и писал
Ryo
Доброго времени суток! специалисты по 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… ссылками и прочим.

Спасибо.
ayb
>>> 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>'
Ryo
Хмм… несколько в лоб, но в любом случае спасибо.
Я думал, может, что из встроенного есть.
kampella
Ryo
Хмм… несколько в лоб, но в любом случае спасибо. Я думал, может, что из встроенного есть.
soup.div.get_text()
ayb
kampella
soup.div.get_text()
Ryo
Со всеми <br />, <a href… ссылками и прочим.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB