Запуск веб-скрейпинга с помощью Python и BeautifulSoup — ошибки во время пошагового руководства

Followed this tutorial about Web Scraping with Python and BeautifulSoup to learn the ropes - However Pycharm returns an error which I do not understand

Всем привет!

Пробовал вышеупомянутый учебник с исправленной ссылкой в ​​качестве фактической ссылки срок действия учебника истек (Новая ссылка, которую я использовал) Однако, когда я нажимаю «Выполнить», я получаю несколько ошибок Пробовал подсказку типа PyCharm безрезультатно.


import requests
from bs4 import BeautifulSoup

r = requests.get('https://pyvideo.org/events/pycon-se-2018.html')

soup = BeautifulSoup(r.text, 'html.parser')
results = [a.attrs.get('href') for a in soup.select('h4.entry-title a[href^=/pycon]')]

print(results)

Ожидался список ссылок. Что я получаю, хотя это куча ошибок


Traceback (most recent call last):
  File "/Users/maxschmitt/PycharmProjects/tester2/tester.py", line 7, in <module>
    results = [a.attrs.get('href') for a in soup.select('h4.entry-title a[href^=/pycon]')]
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/bs4/element.py", line 1376, in select
    return soupsieve.select(selector, self, namespaces, limit, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/soupsieve/__init__.py", line 114, in select
    return compile(select, namespaces, flags, **kwargs).select(tag, limit)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/soupsieve/__init__.py", line 63, in compile
    return cp._cached_css_compile(pattern, namespaces, custom, flags)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/soupsieve/css_parser.py", line 209, in _cached_css_compile
    CSSParser(pattern, custom=custom_selectors, flags=flags).process_selectors(),
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/soupsieve/css_parser.py", line 1048, in process_selectors
    return self.parse_selectors(self.selector_iter(self.pattern), index, flags)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/soupsieve/css_parser.py", line 882, in parse_selectors
    key, m = next(iselector)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/soupsieve/css_parser.py", line 1035, in selector_iter
    raise SelectorSyntaxError(msg, self.pattern, index)
soupsieve.util.SelectorSyntaxError: Malformed attribute selector at position 16
  line 1:
h4.entry-title a[href^=/pycon]

Ты хоть представляешь, что я сделал не так? Любая помощь будет оценена по достоинству!

Большое спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
1 966
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно обернуть /pycon в "" или избежать его с помощью \

import requests
from bs4 import BeautifulSoup

r = requests.get('https://pyvideo.org/events/pycon-se-2018.html')

soup = BeautifulSoup(r.text, 'html.parser')
results = [a.attrs.get('href') for a in soup.select('h4.entry-title a[href^ = "/pycon"]')]

print(results)

Или

results = [a.attrs.get('href') for a in soup.select('h4.entry-title a[href^=/pycon]')]

Я получал ту же ошибку с tbl.select_one("a[href*=doi.org]"), и мне тоже пришлось избегать ., таким образом: tbl.select_one("a[href*=doi\.org]"). Спасибо!

Jabro 06.05.2021 13:33

Другие вопросы по теме