Парсинг сайта BeautifulSoup - Python
Формулировка задачи:
Самостоятельно занимаюсь изучением языка Python.
Решил написать примитивный парсер сайта, используя библиотеку BeautifulSoup, мало того это код из видеоурока.
и получаю такой эксепт:
Понятно что, что то с кодировкой, но не ясно, как победить, гугл не дал результатов.
Листинг программы
- # -*- coding: utf-8 -*-
- import urllib.request
- from bs4 import BeautifulSoup
- def get_html(url):
- response = urllib.request.urlopen(url)
- return response.read()
- def parse(html):
- soup = BeautifulSoup(html, 'html.parser')
- table = soup.find('div', {"class": "Search-result-item"})
- print(table)
- def main():
- parse(get_html('https://www.fabrikant.ru/trades/procedure/search/'))
- if __name__ == "__main__":
- main()
Листинг программы
- Traceback (most recent call last):
- File "D:\python\Parser\Parser.py", line 19, in <module>
- main()
- File "D:\python\Parser\Parser.py", line 16, in main
- parse(get_html('https://www.fabrikant.ru/trades/procedure/search/'))
- File "D:\python\Parser\Parser.py", line 13, in parse
- print(table)
- File "C:\Users\UN\AppData\Local\Programs\Python\Python35-32\lib\encodings
- \cp866.py", line 19, in encode
- return codecs.charmap_encode(input,self.errors,encoding_map)[0]
- UnicodeEncodeError: 'charmap' codec can't encode character '\xab' in position 33
- 7: character maps to <undefined>
UPD: Пока сам придумал обходной маневр обозвав переменную str типом данных.
Решение задачи: «Парсинг сайта BeautifulSoup»
textual
Листинг программы
- # -*- coding: utf-8 -*-
- import urllib.request
- from bs4 import BeautifulSoup
- import premailer
- import logging
- def get_html(url):
- response = urllib.request.urlopen(url)
- return response.read()
- def parse(html):
- soup = BeautifulSoup(html, 'html.parser')
- head = soup.find('head')
- table = soup.find('div', {"class": "Search-list"})
- result_html = premailer.Premailer('<html>' + str(head) + '<body>' + str(table) + '</body></html>',
- cssutils_logging_level=logging.CRITICAL).transform()
- with open('result.html', 'w') as f_obj_out:
- f_obj_out.write(result_html)
- send_mail()
- def send_mail():
- import smtplib
- from email.mime.multipart import MIMEMultipart
- from email.mime.text import MIMEText
- fromaddr = "your_gmail_account"
- toaddr = "address_to_send_to"
- mypass = "your_gmail_password"
- msg = MIMEMultipart()
- msg['From'] = fromaddr
- msg['To'] = toaddr
- msg['Subject'] = "your_desired_subject"
- with open('result.html') as f_obj:
- body = f_obj.read()
- msg.attach(MIMEText(body, 'html'))
- server = smtplib.SMTP('smtp.gmail.com', 587)
- server.starttls()
- server.login(fromaddr, mypass)
- text = msg.as_string()
- server.sendmail(fromaddr, toaddr, text)
- server.quit()
- def main():
- parse(get_html('https://www.fabrikant.ru/trades/procedure/search/'))
- if __name__ == "__main__":
- main()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д