Есть ли лучший способ структурировать эту царапину? - PullRequest
1 голос
/ 08 марта 2020

Все еще учимся создавать веб-с помощью BeautifulSoup и Python. Я придумал это, чтобы получить профессиональный опыт с этого сайта https://lawyers.justia.com/lawyer/ali-shahrestani-esq-198352.

for item in soup.findAll("dl",attrs={"class":"description-list list-with-badges"}):
    x=item.findAll("strong")
    x=remove_tags(str(x))
    print(x)

Вывод:

[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[Attorney]
[]
[]
[]
[]
[]
[]
[]
[]
[]

Я тоже ищу информация в разделе «Адвокат», но я изо всех сил.

1 Ответ

0 голосов
/ 08 марта 2020

Вы можете фильтровать данные с помощью if x:, а позже вы можете делать разные вещи с помощью item

for item in soup.find_all("dl", {"class": "description-list list-with-badges"}):
    x = item.find_all("strong")
    if x:
        print('strong:', x[0].get_text(strip=True))
        print('text:', item.get_text(strip=True, separator='|'))
        print('list:', item.get_text(strip=True, separator='|').split('|'))

Результат

strong: Attorney
text: Attorney|Ali Shahrestani, Esq.|2007|- Current
list: ['Attorney', 'Ali Shahrestani, Esq.', '2007', '- Current']

Или вы можете попробовать использовать другие уникальные значения - ie.

<strong itemprop='jobTitle'>

и использовать другую функцию - ie parent

data = soup.find('strong', {'itemprop': 'jobTitle'}).parent.parent
print('text:', data.get_text(strip=True, separator='|'))
print('list:', data.get_text(strip=True, separator='|').split('|'))

Результат:

text: Attorney|Ali Shahrestani, Esq.|2007|- Current
list: ['Attorney', 'Ali Shahrestani, Esq.', '2007', '- Current']

Полный пример

import requests
from bs4 import BeautifulSoup as BS

url = 'https://lawyers.justia.com/lawyer/ali-shahrestani-esq-198352'
r = requests.get(url)

soup = BS(r.text, 'html.parser')

for item in soup.find_all("dl", {"class": "description-list list-with-badges"}):
    x = item.find_all("strong")
    if x:
        print('strong:', x[0].get_text(strip=True))
        print('text:', item.get_text(strip=True, separator='|'))
        print('list:', item.get_text(strip=True, separator='|').split('|'))

print('---')

item = soup.find('strong', {'itemprop': 'jobTitle'}).parent.parent
print('text:', item.get_text(strip=True, separator='|'))
print('list:', item.get_text(strip=True, separator='|').split('|'))
...