Как получить конкретный предмет, имеющий такое же имя класса и атрибуты - PullRequest
0 голосов
/ 23 апреля 2019

Как я могу получить конкретный предмет с тем же именем класса и атрибутами?

Мне нужно получить эти 3 предмета

14 апреля 2013 года

580

Форт-Пирс, Флорида

<dl class="pairsJustified">
<dt>Joined:</dt>
<dd>Apr 14, 2013</dd>
</dl>
<dl class="pairsJustified">
<dt>Messages:</dt>
<dd><a href="search/member?user_id=13302" class="concealed" 
rel="nofollow">580</a></dd>
</dl>

<dl class="pairsJustified">
<dt>Location:</dt>
<dd>
<a href="misc/location-info?location=Fort+Pierce%2C+FL" target="_blank" 
rel="nofollow noreferrer" itemprop="address" class="concealed">Fort 
Pierce, FL</a>

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Используя они лежат под тегом <dd>, используя .find_all():

from bs4 import BeautifulSoup

test = '''<dl class="pairsJustified">
<dt>Joined:</dt>
<dd>Apr 14, 2013</dd>
</dl>
<dl class="pairsJustified">
<dt>Messages:</dt>
<dd><a href="search/member?user_id=13302" class="concealed" 
rel="nofollow">580</a></dd>
</dl>

<dl class="pairsJustified">
<dt>Location:</dt>
<dd>
<a href="misc/location-info?location=Fort+Pierce%2C+FL" target="_blank" 
rel="nofollow noreferrer" itemprop="address" class="concealed">Fort Pierce, FL</a>'''

soup = BeautifulSoup(test, 'html.parser')
data = soup.find_all("dd")
for d in data:
    print(d.text.strip())

ВЫХОД :

Apr 14, 2013
580
Fort Pierce, FL
0 голосов
/ 23 апреля 2019

это хорошая отправная точка:

In [18]: for a in response.css('.extraUserInfo'):
    ...:     print(a.css('*::text').extract())
    ...:     print('\n\n\n')
    ...:     
['\n', '\n', '\n', '\n']  # <--this (and other outputs like this) is because there is an extra `extraUserInfo` class block above the desired info block if the user has a user group picture/avatar below their username




['\n', '\n', 'Joined:', '\n', 'Mar 24, 2013', '\n', '\n', '\n', 'Messages:', '\n', '6,747', '\n', '\n']




['\n', '\n', '\n', '\n']




['\n', '\n', 'Joined:', '\n', 'Mar 24, 2013', '\n', '\n', '\n', 'Messages:', '\n', '6,747', '\n', '\n']




['\n', '\n', 'Joined:', '\n', 'Apr 14, 2013', '\n', '\n', '\n', 'Messages:', '\n', '580', '\n', '\n', '\n', 'Location:', '\n', '\n', 'Fort Pierce, FL', '\n', '\n', '\n']




['\n', '\n', 'Joined:', '\n', 'Oct 20, 2012', '\n', '\n', '\n', 'Messages:', '\n', '2,476', '\n', '\n', '\n', 'Location:', '\n', '\n', 'Philadelphia, PA', '\n', '\n', '\n']




['\n', '\n', 'Joined:', '\n', 'Dec 11, 2012', '\n', '\n', '\n', 'Messages:', '\n', '2,938', '\n', '\n', '\n', 'Location:', '\n', '\n', 'Colorado', '\n', '\n', '\n']




['\n', '\n', 'Joined:', '\n', 'Sep 30, 2016', '\n', '\n', '\n', 'Messages:', '\n', '833', '\n', '\n', '\n', 'Location:', '\n', '\n', 'Indiana', '\n', '\n', '\n']


...

Есть много способов приблизиться к этому.Немного повозившись, вы получите данные, отформатированные по своему вкусу.Приведенный выше подход является лишь хорошей отправной точкой, потому что есть много строк с только списками символов новой строки в качестве выходных данных, потому что (кажется), что пользовательские информационные блоки, где у пользователя есть изображение группы пользователей (например, tesla of arizona), затем *Класс 1004 * также используется для группировки этого блока html.Будут лучшие способы сгруппировать это ...

В основном response.css ('. ExtraUserInfo') будет агрегировать все блоки с классом extraUserInfo, который выглядит как блоки, содержащие информацию о пользователе, которую вы ищете.за.Оттуда извлеките весь нижележащий текст с помощью псевдо-селектора ::text и выполните синтаксический анализ массивов.

Определенно, есть лучший способ приблизиться к этому, если вы внимательно посмотрите на структуру html и извлекаете ее таким образом, чтобыпосле этого у вас остается меньше работы по обработке, но это должно привести вас на правильный путь.Селекторы CSS или документация xpath должны быть очень полезны.

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