#python #web-scraping #beautifulsoup
Вопрос:
это мой первый вопрос в stack overflow. Я работаю над проектом по очистке веб-страниц и пытаюсь получить доступ к html-элементам с помощью красивого супа.
Пожалуйста, кто-нибудь может дать мне совет, как извлечь следующие элементы?
Задача состоит в том, чтобы удалить все объявления о вакансиях со страницы результатов поиска.
Элементы списка заданий находятся внутри «Содержимого раздела результатов».
Я хочу получить доступ к каждому «классу статей» и
- извлеките его идентификатор, например, должность-7460756
- извлеките его ссылку, где data-at=»должность-должность-название».
- извлеките его текст h2 (решено)
Как выполнить циклический просмотр ResultsSectionContainer и получить доступ/извлечь информацию для каждого элемента / идентификатора задания «класс статьи»?
Имя класса статьи каким-то образом динамично/уникально и меняется (я думаю) каждый раз, когда выполняется новый поиск.
<div class="ResultsSectionContainer-gdhf14-0 cxyAav">n
<article class="sc-fzowVh cUgVEH" id="job-item-7460756">
<a class="sc-fzoiQi eRNcm" data-at="job-item-title"
href="/stellenangebote--Wirtschaftsinformatiker-m-w-d-mit-Schwerpunkt-ERP-Systeme-Heidelberg-Celonic-Deutschland-GmbH-Co-KG--7460756-inline.html" target="_blank">n
<h2 class="sc-fzqARJ iyolKq">n Wirtschaftsinformatiker (m/w/d) mit Schwerpunkt ERP-Systemen
</h2>n
</a>n
<article class="sc-fzowVh cUgVEH" id="job-item-7465958">n
...
Комментарии:
1. Пожалуйста, разместите URL-адрес
Ответ №1:
Ты можешь сделать вот так.
- Выберите
<div>
с именем класса какResultsSectionContainer-gdhf14-0
- Найдите все
<article>
теги внутри приведенного выше<div>
с помощью.find_all()
— это даст вам список всех тегов статей - Повторите приведенный выше список и извлеките необходимые вам данные.
from bs4 import BeautifulSoup
s = '''<div class="ResultsSectionContainer-gdhf14-0 cxyAav">
<article class="sc-fzowVh cUgVEH" id="job-item-7460756">
<a class="sc-fzoiQi eRNcm" data-at="job-item-title"
href="/stellenangebote--Wirtschaftsinformatiker-m-w-d-mit-Schwerpunkt-ERP-Systeme-Heidelberg-Celonic-Deutschland-GmbH-Co-KG--7460756-inline.html" target="_blank">
<h2 class="sc-fzqARJ iyolKq"> Wirtschaftsinformatiker (m/w/d) mit Schwerpunkt ERP-Systeme
</h2>
</a>
</div>'''
soup = BeautifulSoup(s, 'lxml')
d = soup.find('div', class_='ResultsSectionContainer-gdhf14-0')
for i in d.find_all('article'):
job_id = i['id']
job_link = i.find('a', {'data-at': 'job-item-title'})['href']
print(f'JOB_ID: {job_id}nJOB_LINK: {job_link}')
JOB_ID: job-item-7460756
JOB_LINK: /stellenangebote--Wirtschaftsinformatiker-m-w-d-mit-Schwerpunkt-ERP-Systeme-Heidelberg-Celonic-Deutschland-GmbH-Co-KG--7460756-inline.html
Комментарии:
1. Большое вам спасибо за ваш быстрый ответ. Это решение очень помогает.
Ответ №2:
Если все классы статей одинаковы, попробуйте это
articles = data.find_all("article", attrs={"class": "sc-fzowVh cUgVEH"})
for article in articles:
print(article.get("id"))
print(article.a.get("href"))
print(article.h2.text.strip())
Комментарии:
1. Спасибо вам за быстрый ответ. Название класса «sc-fzowVh cUgVEH» может быть изменено. Похоже, что это может не сработать, если я захочу применить этот код в будущих результатах поиска.
Ответ №3:
Вы могли бы сделать что-то вроде этого:
results = soup.findAll('article', {'class': 'sc-fzowVh cUgVEH'})
for result in results:
id = result.attrs['id']
href = result.find('a').attrs['href']
h2 = result.text.strip()
print(f' Job id: t{id}n Job link: t{href}n Job desc: t{h2}n')
print('---')
вы также можете указать префикс href
URL — адреса, с которого вы извлекаете результаты.