Метод find python парсинг

How To Use BeautifulSoup’s find() Method

BeautifulSoup’s .find() method is a powerful tool for finding the first page element in a HTML or XML page that matches your query criteria.

In this guide, we will look at the various ways you can use the find method to extract the data you need:

If you would like to find all the elements that match your query criteria then use the find_all() method.

BeautifulSoup .find() Method

You should use the .find() method when there is only one element that matches your query criteria, or you just want the first element.

The .find() returns the first element that matches your query criteria.

To use the .find() method simply add the page element you want to find to the .find(‘h1’) method. In this case, we want to find all the tags on a HTML page.

For more details then check out the full findall documentation here.

Find By Class And Ids​

The .find_all() method allows you to find the first element on the page by class name, id, or any other element attribute using the attrs parameter that matches your query criteria.

For example, here are examples on how to find the first

tag that have the following classes, ids or attributes:

  ## 

Tag + Class Name soup.find('p', class_='class_name') ##

Tag + Id soup.find('p', id='id_name') ##

Tag + Any Attribute soup.find('p', attrs="aria-hidden": "true">)

Find By Text​

The .find() method allows you to search by string too using the string parameter. It returns the first string that exactly match your string.

  ## Strings that exactly match 'Link 1' soup.find(string="Link 1") ## --> 'Link 1' 

If you want to find the first string that contains your substring then you need to use regular expressions:

  import re  ## Strings that contain 'Link' soup.find(string=re.compile("Link")) ## --> 'Link 1' 

Find With Multiple Criteria​

If you need to find the first page element that requires you to add multiple attributes to the query then you can do so with the attrs parameter:

  ## 

Tag + Class Name & Id soup.find('p', attrs="class": "class_name", "id": "id_name">)

Find Using Regex​

The .find() method also supports the use of regular expressions.

Simply add the regex query into the .find() method.

For example, here we are using the .find() method with a regex expression to find all tags that start with the letter b:

  import re  ## Find First Element That Starts With The Letter 'b' soup.find(re.compile("^b")) # --> .  

Find Using Custom Functions​

If you need to make very complex queries then you can also pass functions into the .find() method:

  def custom_selector(tag): # Return "span" tags with a class name of "target_span" return tag.name == "span" and tag.has_attr("class") and "target_span" in tag.get("class") soup.find(custom_selector) 

More Web Scraping Tutorials​

So that’s how to use the BeautifulSoup’s .find() method.

If you would like to learn more about how to use BeautifulSoup then check out our other BeautifulSoup guides:

Or if you would like to learn more about Web Scraping, then be sure to check out The Python Web Scraping Playbook.

Or check out one of our more in-depth guides:

Источник

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

Данная статья это вводный учебник по библиотеке BeautifulSoup Python. Примеры из данной статьи помогут вам понять как находить HTML теги, обходить элементы из HTML документа, менять содержимое тегов и парсить веб-страницы.

Причина использования python в этом руководстве довольно очевидна: python очень гибкий и имеет большую поддержку сообщества. Даже если вы новичок, пытающийся научиться веб-скрейпингу с помощью python, эта статья будет очень полезна для вас. Это длинное руководство, поэтому пристегните ремни и давайте начнем.

Прежде чем приступить к веб-скрейпингу в Python, давайте поймем важность HTTP заголовков при парсинге любой веб-страницы. Мы подробно рассмотрим HTTP заголовки. Возможно, я ошибаюсь, но когда я начинал программировать, меня очень пугали HTTP заголовки. Но вскоре я понял, что использовать заголовки при составлении HTTP-запросов очень просто.

HTTP-заголовки (необходимое для веб-скрейпинга в python)

В этом разделе я расскажу о концепции заголовков на некоторых примерах и поделюсь ссылками, чтобы вы могли узнать больше о заголовках в деталях. Итак, давайте перейдем к делу.

Возможно, вы уже знаете, что когда вы выполняете вызовы к API, вы передаете часть информации в «конверте». Допустим, один человек является клиентом, а другой — сервером, и конверт передается в виде API, что и является способом коммуникации.

Содержимое конверта — это данные, которые передаются от одного человека к другому, но вы также можете знать, что когда такие коммуникации происходят в реальной жизни, на верхней части конверта также указывается адрес, по которому эти данные должны быть переданы. Но наряду с этим адресом есть и другой адрес, который используется, когда письмо не получено получателем.

Это просто аналогия, но я пытаюсь объяснить вам, что заголовки тоже выполняют подобную роль.

HTTP Заголовки — это своего рода индикаторы метаданных о том, из чего состоит ответ или запрос. Чтобы понять это, позвольте мне классифицировать заголовки. Итак, в основном их можно разделить на четыре различные категории.

  • Заголовки запроса;
  • Заголовки ответа;
  • Заголовки полезной нагрузки (payload);
  • Заголовки представления (определенного типа, Content-Type)

Это не означает, что заголовок запроса не может быть заголовком ответа и наоборот. Давайте разберемся, что на самом деле означает каждый из этих заголовков.

Заголовки запроса

Это пара ключ-значение, как и другие заголовки, и они отправляются клиентом, который запрашивает данные. Они посылаются для того, чтобы сервер мог понять, как он должен отправить ответ. Он также помогает серверу определить отправителя запроса.

Примерами заголовков запроса являются:

  • Host: www.python-scripts.com
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
  • Referer: localhost
  • Connection: close
  • Accept-Language: ru
  • Accept-Encoding; gzip

Помните, что заголовок Content-Type не является заголовком запроса, это заголовок представления. Мы поговорим об этом подробнее, но я просто хотел как можно скорее устранить эту путаницу из вашего сознания.

Из приведенного выше списка заголовков-образцов, Host и User-Agent содержат информацию о том, кто посылает запрос.

Accept-Language говорит серверу, что это язык, на котором я могу понять ваш ответ, и аналогично Accept-Encoding говорит серверу, что даже если у вас сжатые данные, я могу их понять.

Заголовки ответа

Они похожи на заголовки запроса, но передача происходит в обратном порядке. На самом деле, эти заголовки посылаются сервером клиенту. Они объясняют клиенту, что делать с ответом. Он предоставляет дополнительную информацию об отправленных данных.

Etag — это заголовок ответа, который используется для указания версии и кэша. Date сообщает клиенту дату, когда ответ был отправлен от сервера к клиенту. Но опять же Content-Type или Content-Encoding — это заголовки представления, которые мы рассмотрим чуть позже.

Заголовки представления

Заголовки представления указывают на тип переданных данных. Данные, отправленные с сервера к клиенту, могут быть в любом формате, например JSON, HTML, XML, chunked (если размер данных огромен) и т. д. Сервер также сообщает клиенту о диапазоне содержимого.

Примеры заголовков представления:

  • Content-Type: text/html
  • Content-Encoding: gzip
  • Content-Length: 3523
  • Content-Range: bytes 50–1000/*
  • Content-Location: /docs/fo.xml

Content-Location сообщает клиенту об альтернативном расположении ресурса или данных, которые доступны клиенту для получения информации. Это может быть URL, где хранится данный конкретный ресурс.

Помимо этих заголовков, могут быть и другие заголовки, такие как Trailer, Transfer-Encoding, Etag, if-Not-Match, Authorizations и т.д.

Теперь, что если вы разрабатываете API и хотите определить свои собственные заголовки? Можете ли вы это сделать? Вы совершенно спокойно можете это сделать. Таким же образом, как вы определяете структуру запроса и ответа вашего API, вы можете реализовать собственные заголовки, которые будете принимать вы или сервер.

Примером собственного заголовка может быть заголовок Authorization. Этот заголовок может иметь любое значение. Далее, сервер может использовать это значение для идентификации клиента или для любых других логических операций.

Библиотека BeautifulSoup на примерах

Данная статья это вводный учебник по библиотеке BeautifulSoup Python. Примеры из данной статьи помогут вам понять как находить HTML теги, обходить элементы из HTML документа, менять содержимое тегов и парсить веб-страницы.

BeautifulSoup — это Python библиотека для разбора HTML и XML документов. Она часто используется для веб-скрейпинга. BeautifulSoup преобразует сложный HTML-документ в сложное дерево объектов Python, таких как тег, навигационная строка или комментарий.

Установка BeautifulSoup

Мы используем команду pip для установки необходимых модулей.

Источник

Читайте также:  Пример вставки рисунка в html
Оцените статью