# -*- 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')])
ерроер :
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