Извлечение данных из тега HTML с помощью Beautifulsoup

Я пытаюсь извлечь поле EXPERIENCE из приведенного ниже html

<html><head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
</head><body>
<span></span>
<div><a>Page 1</a></div>
<div><span>XYZ 
<br/></span></div><div><span>8</span><span>th</span><span> Semester Undergraduate | Computer Science Engineering | UCE RTU, Kota 
<br/></span></div><div><span>+91 1234567890 | [email protected] | 7/108, Malviya Nagar Jaipur (302017)</span><span>
<br/></span></div><div><span>SUMMARY 
<br/></span></div><div><span>
<br/></span></div><div><span>To seek an opportunity to apply my technology expertise along with my creative problem solving skills in an 
<br/>innovative software company. 
<br/></span></div><div><span>
<br/></span></div><div><span>EXPERIENCE</span><span>
<br/></span></div><div><span>
<br/></span></div><div><span>
<br/></span></div><div><span>•</span><span> </span><span>Machine Learning Engineering Intern , Forsk Technologies , Jaipur  (May,2017 – July,2017)    </span><span>
<br/></span></div><div><span>Learned the foundational concepts of data science and machine learning including python and statistics, 
<br/>enough time was spent on understanding the concept behind each algorithm and examples and case 
<br/></span><span>studies were done. Built some mid-scaled machine learning models using supervised and unsupervised 
<br/></span><span>learning.</span>
<span>
<br/></span></div><div><span>•</span><span> </span><span>Software Engineering Intern , Proxbotics Creations Technologies , Jaipur (May,2016 – July,2016)</span><span>
<br/></span></div><div><span>Developed  and  optimized  various  projects  including  ecommerce,  booking  &amp;  reservation,  non-profit 
<br/>organization Websites, using technologies: HTML, CSS, PHP, JavaScript, MySQL etc.                         </span><span>
<br/></span></div><div><span>•</span><span> </span><span>Trainee at TecheduSoft , Kota  (May,2015)</span><span>
<br/></span></div><div><span>The course contains 15+ modules including Android Basics, fragments, screen designing, intents, various 
<br/>views, signing app, web servers, web services, notifications, etc.
<br/></span></div></body></html>

Но не удалось получить требуемый результат

Ожидаемый результат: Стажер по машинному обучению, Forsk Technologies, Джайпур (май 2017 г. — июль 2017 г.) Изучил основополагающие концепции науки о данных и машинного обучения, включая Python и статистику, было потрачено достаточно времени на понимание концепции каждого алгоритма и примеров и были проведены кейс-стади. Создал несколько моделей машинного обучения среднего масштаба с использованием контролируемого и неконтролируемого обучения.

Стажер по разработке программного обеспечения, Proxbotics Creations Technologies, Джайпур (май 2016 г. – июль 2016 г.) Разрабатывал и оптимизировал различные проекты, включая электронную коммерцию, бронирование и бронирование, веб-сайты некоммерческих организаций с использованием технологий: HTML, CSS, PHP, JavaScript, MySQL и т. д.

Стажер в TecheduSoft, Кота (май 2015 г.) Курс содержит более 15 модулей, включая основы Android, фрагменты, дизайн экрана, намерения, различные представления, приложение для подписи, веб-серверы, веб-сервисы, уведомления и т. д.


person Rajeev Srivastava    schedule 23.08.2019    source источник
comment
Есть ли еще html? Было бы полезно иметь полный правильно сформированный html. Или, по крайней мере, до следующего раздела, который вы хотите исключить.   -  person QHarr    schedule 23.08.2019
comment
@QHarr Я отредактировал вопрос. Не могли бы вы помочь мне здесь?   -  person Rajeev Srivastava    schedule 23.08.2019
comment
@QHarr У меня возвращается ноль. Не работай.   -  person Rajeev Srivastava    schedule 27.08.2019


Ответы (1)


Один из способов — использовать bs4 4.7.1+ и :has и :contains. Это предполагает, что пункты списка относятся к разделу опыта. В противном случае вы можете отфильтровать одноуровневые элементы EXPERIENCE с помощью:

for i in soup.select('div:has(span:contains("EXPERIENCE")) ~ div:has(span:contains("•"))'):

py

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'lxml')
for i in soup.select('div:has(span:contains("•"))'):
    print(' '.join([i.text.strip(), i.next_sibling.get_text().strip().replace('\n',' ')]))

введите здесь описание изображения

person QHarr    schedule 23.08.2019