Как использовать Python и BeautifulSoup для разбора классов

Я пытаюсь проанализировать только независимые претензии от google.com/patents, но они используют то же имя класса, что и дочерние зависимые претензии. Я новичок, но я думаю, что я пытаюсь спросить, как мне исключить дочерние результаты, если у родителя есть определенное имя класса.

Я пытался работать с примерами родитель/ребенок/брат/сестра/и т.д.. из учебника это BeautifulSoup.

К сожалению, ничего не помогло.


from bs4 import BeautifulSoup
import requests

url = 'https://patents.google.com/patent/US7054130?oq=US7654309'

response = requests.get(url)

data = response.text
soup = BeautifulSoup(data, 'html.parser')


claims = soup.find_all('div', class_='claim')

for claim in claims:

    if claim.find(class_='claim-dependent style-scope patent-text'):
        continue
    print(claim.text)

Я ожидал, что разделы зависимых пунктов будут пропущены и напечатаны только независимые пункты.

Результаты. Распечатываются все утверждения, независимые и зависимые.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ваш оператор if ничего не делает, потому что он содержит только continue (и результат, кстати, пуст), поэтому вы печатаете все утверждения в следующей строке.

Вы можете отфильтровать все заявки с зависимым тегом claim-ref:

from bs4 import BeautifulSoup
import requests

url = 'https://patents.google.com/patent/US7054130?oq=US7654309'

response = requests.get(url)

data = response.text
soup = BeautifulSoup(data, 'html.parser')


claims = soup.find_all('div', class_='claim')

for claim in claims:
    if not claim.find('claim-ref'):
        print(claim.find(class_='claim'))

Я новичок в этом и немного не уверен, откуда взялся «требование-ссылка». Относится ли это к «зависимому от претензии», где ref занимает место «зависимого»?

BubbaJones 22.06.2019 06:23

Каждый дочерний элемент (зависимый cliam) имеет тег <claim-ref>, который ссылается на одного родителя, например. <claim-ref idref = "CLM-00001">claim 1</claim-ref>. Я фильтрую такие все претензии, которые имеют такой тег, чтобы остались только независимые претензии. Также, пожалуйста, примите решение или проголосуйте за него, если оно вам помогло или понравилось. :-)

ilja 22.06.2019 09:50

Я думаю, просто отфильтруйте родительские и дочерние классы, поскольку это исключает утверждения с родительским классом claim-dependent, которые, как я полагаю, являются зависимыми.

print(soup.select('.claim .claim')

3 матча (претензии 1,6,19)


Вы можете увидеть один из каждого типа здесь:

Это относится к утверждениям 1 и 2. В верхнем утверждении 1 есть родительский div с классом claim и дочерний элемент с классом claim, тогда как в нижнем утверждении 2 есть родительский div с классом claim-dependant, а затем дочерний элемент с классом claim. Таким образом, вы указываете эту связь родительского класса и дочернего класса для фильтрации.


from bs4 import BeautifulSoup
import requests

url = 'https://patents.google.com/patent/US7054130?oq=US7654309'
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data, 'html.parser')
data = [claim.text for claim in soup.select('.claim .claim')]
print(data)

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