Cannot import Beautiful Soup
I am trying to use BeautifulSoup, and despite using the import statement:
from bs4 import BeautifulSoup
I am getting the error: ImportError: cannot import name BeautifulSoup
import bs4 does not give any errors.
I have also tried import bs4.BeautifulSoup and just importing bs4 and creating a BeautifulSoup object with: bs4.BeautifulSoup()
Any guidance would be appreciated.
12 Answers 12
The issue was I named the file HTMLParser.py , and that name is already used somewhere in the bs4 module.
Thanks to everyone that helped!
I found out after numerous attempts to solve the ImportError: cannot import name ‘BeautifulSoup4’ that the package is actually called BeautifulSoup so the import should be:
from bs4 import BeautifulSoup
Make sure the directory from which you are running your script does not contain a filename called bs4.py.
I solved it by installing beautifulsoup4, the «4» is essential.
I experienced a variation of this problem and am posting for others’ benefit.
I named my Python example script bs4.py
Inside this script, whenever trying to import bs4 using the command:
from bs4 import BeautifulSoup , an ImportError was thrown, but confusingly (for me) the import worked perfectly from an interactive shell within the same venv environment.
After renaming the Python script, imports work as expected. The error was caused as Python tries to import itself from the local directory rather than using the system copy of bs4
Источник
ImportError: cannot import name ‘BeautifulSoup4’
I know this question has been asked a lot on this site, but I have tried all of the solutions given, and I cannot figure out how to solve this problem.
For starters: I am on a Windows 10 computer using Python 3.6 . I installed Anaconda as my IDE.
I tried to install BeautifulSoup4 with pip install beautifulsoup4 , but I got the
The code I am trying to run is just
Here is what I have tried to resolve this problem:
- 1. Since 90% of the solutions I have found were because someone had named a file `bs4.py`, I checked for that. However this was the very first file I had made on this computer which was just named `untitled1.py`. Later on (last thing I did) out of frustration I deleted every instance of bs4 and beautiful from my computer, and the problem persisted, so another file being named `bs4` is definitely not the issue.
- I tried just importing bs4 (import bs4 ). That works perfectly fine, or at least it does not lead to any errors.
- I changed the directories around. The bs4 file is currently in the default Anaconda folder. I then changed the CD to the location of the project file and even tried copying and pasting the bs4 , bs4-0.0.1.dist-info , and beautifulsoup4-4.6.3.dist-info files into the project file directory. Nothing really changed there.
- I also did pip3 install bs4 . I don’t know if that’s necessary, but I did that as well.
- I reinstalled all of these multiple times including Anaconda once and bs4/beautifulsoup 7 or 8 times, including a few uses of pip install —upgrade -force-reinstall beautifulsoup4 .
Anyways, I hope this helps describe the problem. Let me know if I can provide any further information.
Thanks in advance for any help you guys can give me!
Источник
BeautifulSoup4 не может быть установлен в python3.5 на Windows7
Я загрузил beautifulsoup4-4.5.3.tar.gz из https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/ и разархивировал его в свой рабочий каталог python (который не мой каталог установки python).
Однако, когда я запускаю
в моем IDLE появилось сообщение об ошибке:
Я пробовал эти методы, но вышеописанный массаж ошибок не выходил
- откройте setup.py в моем IDLE и запустите его (дает === RESTART: D:\python\beautifulsoup4-4.5.3\beautifulsoup4-4.5.3\setup.py === в IDLE-окнах, но from bs4 import BeautifulSoup не работает)
используйте cmd и перейдите к D:\python\beautifulsoup4-4.5.3\beautifulsoup4-4.5.3, запустите pip uninstall beautifulsoup4 , затем запустите pip install beautifulsoup4 , он показывает, что я успешно установил beautifulsoup4-4.5.3 в строке cmd, однако, ошибка error все еще появляется в IDLE после from bs4 import BeautifulSoup
используйте cmd и перейдите к
D:\python\beautifulsoup4-4.5.3\beautifulsoup4-4.5.3, запустите pip3
uninstall beautifulsoup4 , затем запустите pip3 install beautifulsoup4 ;
бесполезно, как указано выше
запустить pip install bs4 —ignore-installed , бесполезно, как указано выше
запустить setup.py install , бесполезно, как указано выше
запустите 2to3 -w bs4 в строке cmd под D:\python\beautifulsoup4-4.5.3\beautifulsoup4-4.5.3, возвращает ‘2to3’ is not recognized as an internal or external command,operable program or batch file.
рядом, pip show bs4 дает это
под моим каталогом C:\Users\myname\AppData\Local\Programs\Python\Python35-32\Lib\site-packages, я могу видеть три каталога, связанные с beautifulsoup: beautifulsoup4-4.5.3.dist-info, bs4 и bs4-0.0.1-py3.5.egg-info, но from bs4 import BeautifulSoup продолжать выкидывать неправильное сообщение
Источник
BeautifulSoup не парсит страницу до конца
Писал парсер до какого-то времени он работал нормально, а потом видимо в страницу разработчики внесли изменения и код стал невалидным или что-то типа того)
Раньше выводилась целая страница, теперь только половина либо только шапка
пробовал html5lib, lxml и html.parser
BeautifulSoup(req, «lxml»)
BeautifulSoup(req, «html.parser»)
BeautifulSoup(req, «html5lib»)
у каждого из вариантов разный результат но целая страница все равно не парсится
смотрел результат req = urllib.request.urlopen(html) там страница корректно подгружена и проблем нет
в чем может быть загвоздка?(
я только начинаю это дело, буду очень признателен за советы, единственное, что я хотел бы получить это полный код страницы в супе и все)
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Не парсит до конца
private void button1_Click(object sender, EventArgs e) < .
Curl не до конца парсит
Добрый день, помогите пожалуйста, есть вот такой код: $result1 = mysql_query («SELECT * FROM.
Парсит нужный текст не до конца
Помогите, парсит только 1 строку, а нужно что бы все function Pars(T_, ForS, _T: string): string;.
Добрый день. Подскажите пожалуййста, в чем может быть ошибка при парсинге сайта. Использую.
Попробовал ваш код запустить и страница распарсилась полностью
Своей волей и в своем интересе Я даю согласие на обработку, в т.ч. на сбор, систем
атизацию, накопление, хранение,
(уточнение, обновление, изменение), использование, передачу третьим лицам (со спи
ском третьих лиц можно
ознакомиться на сайте www.eldorado.ru/club), обезличивание, блокирование, уничтож
ение, моих персональных данных,
которые в зависимости от документа (анкета, заявление и т.п.) включают, но не огр
аничиваются следующими ПДн:
ФИО, дата рождения, пол, паспортные данные (серия, номер, кем и когда выдан), адр
ес регистрации или пребывания
(фактический адрес проживания), номер контактного телефона, адрес электронной поч
ты, Обществу с ограниченной
ответственностью «ЭЛЬДОРАДО», ОГРН 5077746354450 (125493, г.*Москва, ул.*Смольная
, д.*14), с целью
предоставления мне своих товаров и услуг (продуктов), включая, но не ограничиваяс
ь: идентификацией участника в
программе лояльности, обеспечения процедуры учета накопления и использования бону
сов, осуществление доставки,
предоставление сервисных услуг, распространения рекламных сообщений (в т.ч. о про
водимых акциях и специальных
предложениях через любые каналы коммуникации, в том числе по почте, SMS, электрон
ной почте, телефону, иным
средствам связи), сбора мнения о работе магазинов ООО*«ЭЛЬДОРАДО».
Я согласен(на), что мои персональные данные будут обрабатываться способами, соотве
тствующими целям обработки
персональных данных, в т.ч. с использованием средств автоматизации или без исполь
зования таких средств. А так же
я согласен(на) с тем, что согласие данное мной в электронной форме на сайте являе
тся согласием, полностью
отвечающим требованиям законодательства о персональных данных и позволяющим подтв
ердить факт его получения ООО*«ЭЛЬДОРАДО».
Согласие дается мной на все время действия Программы.
При этом я проинформирован (-а) и согласен (-а) с тем, что отзыв настоящего соглас
ия будет автоматически
прекращать мое участие в Программе лояльности, мой бонусный счет участника Програ
ммы лояльности будет
заблокирован и его блокировка будет означать невозможность его использования, в т
ом числе аннулирование всех
Бонусов, имеющихся на бонусном счете, а так же мне придется повторно давать согла
сие на обработку ПДн в случае,
если я снова решу воспользоваться услугами или продуктами ООО*«ЭЛЬДОРАДО», требую
щими заполнения анкет,
заявлений и т.п., содержащих мои ПДн.
Источник
Облегчаем себе жизнь с помощью BeautifulSoup4
Приветствую всех. В этой статье мы сделаем жизнь чуточку легче, написав легкий парсер сайта на python, разберемся с возникшими проблемами и узнаем все муки пайтона что-то новое.
Статья ориентирована на новичков, таких же как и я.
Начало
Для начала разберем задачу. Взял я малоизвестный сайт новостей об Израиле, так как сам проживаю в этой стране, и хочется читать новости без рекламы и не интересных новостей. И так, имеется сайт, на котором постятся новости: есть новости помеченные красным, а есть обычные. Те что обычные — не представляют собой ничего интересного, а отмеченные красным являются самым соком. Рассмотрим наш сайт.
Как видно сайт достаточно большой и есть много ненужной информации, а ведь нам нужно использовать лишь контейнер новостей. Давайте использовать мобильную версию сайта,
чтобы сэкономить себе же время и силы.
Как видите, сервер отдал нам красивый контейнер новостей (которых, кстати, больше чем на основном сайте, что нам на руку) без рекламы и мусора.
Давайте рассмотрим исходный код, чтобы понять с чем мы имеем дело.
Как видим каждая новость лежит по-отдельности в тэге ‘a’ и имеет класс ‘lenta’. Если мы откроем тэг ‘a’, то заметим, что внутри есть тэг ‘span’, в котором находится класс ‘time2’, либо ‘time2 time3’, а также время публикации и после закрытия тэга мы наблюдаем сам текст новости.
Что отличает важную новость от неважной? Тот самый класс ‘time2’ или ‘time2 time3’. Новости помеченые ‘time2 time3’ и являются нашими красными новостями. Раз уж суть задачи понятна, перейдем к практике.
Практика
Для работы с парсерами умные люди придумали библиотеку «BeautifulSoup4», в которой есть еще очень много крутых и полезных функций, но об этом в следующий раз. Нам также понадобиться библиотека Requests позволяющая отправлять различные http-запросы. Идем их скачивать.
(убедитесь, что стоит последняя версия pip)
Переходим в редактор кода и импортируем наши библиотеки:
Для начала сохраним наш URL в переменную:
Теперь отправим GET()-запрос на сайт и сохраним полученное в переменную ‘page’:
Код вернул нам статус код ‘200’, значит это, что мы успешно подключены и все в полном порядке.
Теперь создадим два списка (позже я объясню для чего они нужны):
Самое время воспользоваться BeautifulSoup4 и скормить ему наш page, указав в кавычках как он нам поможет ‘html.parcer’:
Если попросить его показать, что он там сохранил:
Нам вылезет весь html-код нашей страницы.
Теперь воспользуемся функцией поиска в BeautifulSoup4:
Давайте разберём поподробнее, что мы тут написали.
В ранее созданный список ‘news’ (к которому я обещал вернуться), сохраняем все с тэгом ‘а’ и классом ‘news’. Если попросим вывести в консоль все, что он нашел, он покажет нам все новости, что были на странице:
Как видите, вместе с текстом новостей вывелись теги ‘a’, ‘span’, классы ‘lenta’ и ‘time2’, а также ‘time2 time3’, в общем все, что он нашел по нашим пожеланиям.
Тут мы в цикле for перебираем весь наш список новостей. Если в новости мы находим тэг ‘span’ и класc ‘time2 time3’, то сохраняем текст из этой новости в новый список ‘filteredNews’.
Обратите внимание, что мы используем ‘.text’, чтобы переформатировать строки в нашем списке из ‘bs4.element.ResultSet’, который использует BeautifulSoup для своих поисков, в обычный текст.
Однажды я застрял на этой проблеме надолго в силу недопонимания работы форматов данных и неумения использовать debug, будьте осторожны. Таким образом теперь мы можем сохранять эти данные в новый список и использовать все методы списков, ведь теперь это обычный текст и, в общем, делать с ним, что нам захочется.
Выведем наши данные:
Вот что мы получаем:
Мы получаем время публикации и лишь интересные новости.
Дальше можно построить бот в Телеге и выгружать туда эти новости, либо создать виджет на рабочий стол с актуальными новостями. В общем, можно придумать удобный для себя способ узнавать о новостях.
Надеюсь эта статья поможет новичкам понять, что можно делать с помощью парсеров и поможет им немного продвинуться вперед с обучением.
Спасибо за внимание, был рад поделиться опытом.
Источник