urlopen('http://www.pythonscraping.com/pages/page1.html')
2. Добавить ровно пять букв b.
3. Добавить произвольное четное число букв c.
4. В конце поставить букву d или e.
Этим правилам соответствуют строки aaaabbbbbccccd, aabbbbbcce и т.д. (количество вариантов бесконечно).
Регулярные выражения — всего лишь краткий способ представления этих наборов правил. Например, регулярное выражение для описанного выше набора правил выглядит так:
aa*bbbbb(cc)*(d|e)
На первый взгляд эта строка смотрится жутковато, но она станет понятнее, если разбить ее на составляющие:
•aa* — буква a, после которой стоит символ * (звездочка), означает «любое количество букв a, включая 0». Такая запись гарантирует, что буква a будет написана хотя бы один раз;
• bbbbb — ничего особенного, просто пять букв b подряд;
• (cc)* — любое количество чего угодно можно заключить в скобки. Поэтому для реализации правила о четном количестве букв c мы можем написать две буквы c, заключить их в скобки и поставить после них звездочку. Это значит, что в строке может присутствовать любое количество пар, состоящих из букв c (обратите внимание, что это также может означать 0 пар);
• (d|e) — вертикальная линия между двумя выражениями означает «то или это». В данном случае мы говорим «добавить d или e». Таким образом мы гарантируем, что в строку добавится ровно один из этих двух символов.
Всякий раз, обращаясь к тегу в объекте BeautifulSoup, разумно добавить проверку того, существует ли этот тег. При попытке доступа к несуществующему тегу BeautifulSoup возвращает объект None.
Преимущество lxml, по сравнению с html.parser, состоит в том, что lxml в целом лучше справляется с «грязным» или искаженным HTML-кодом. Анализатор lxml прощает неточности и исправляет такие проблемы, как незакрытые и неправильно вложенные теги, а также отсутствующие теги head или body. Кроме того, lxml работает несколько быстрее, чем html.parser, хотя при веб-скрапинге скорость анализатора не всегда является преимуществом, поскольку почти всегда главное узкое место — скорость самого сетевого соединения.
По существующему соглашению на странице может быть только один тег h1, однако принятые в Интернете соглашения часто нарушаются. Поэтому следует помнить, что таким образом будет получен только первый экземпляр тега и не обязательно тот, который вы ищете.
Добавляя функции веб-скрапинга для других новостных сайтов, вы, вероятно, заметите некоторую закономерность. В сущности, функция синтаксического анализа любого сайта делает одно и то же:
Найдите ссылку Print This Page
Поскольку CSS использует эти идентифицирующие атрибуты для соответствующего оформления сайтов, мы можем быть практически уверены в том, что на большинстве современных сайтов будет много атрибутов class и id.
Чтобы назначать элементам разные стили, CSS опирается на дифференциацию HTML-элементов, которые в противном случае имели бы одинаковую разметку.