How to get specific text information with no unique elements in Python Beautiful Soup?

Viewed 59

I would like to just get the open positions text from this website: https://www.praeses.com/careers/. I copy and pasted the class and it pulls the text from most of the site because almost everything uses this class, but there's no other unique data to pull from. How do I just get the open positions? I basically get everything with an "a class".

<a class="et_pb_button et_pb_custom_button_icon et_pb_button_1 et_hover_enabled et_pb_bg_layout_dark" href="https://www.praeses.com/senior-national-accounts-manager/" data-icon="5">Senior National Accounts Manager</a>
import requests
from bs4 import BeautifulSoup

print("Praeses jobs:")
praeses_url = "https://www.praeses.com/careers/"
praeses_html_text = requests.get(praeses_url).text
praeses_soup = BeautifulSoup(praeses_html_text, 'html.parser')
# print(praeses_soup)
for job in praeses_soup.find_all('et_pb_button et_pb_custom_button_icon et_pb_button_1 et_hover_enabled et_pb_bg_layout_dark'):
    print(praeses_soup.text)
2 Answers

You can use CSS selector for the task.

For example:

import requests
from bs4 import BeautifulSoup

url = 'https://www.praeses.com/careers/'

soup = BeautifulSoup(requests.get(url).content, 'html.parser')

for a in soup.select('div:contains("Open Positions") ~ div > a'):
    print('{:<40}{}'.format(a.get_text(strip=True), a['href']))

Prints:

Senior National Accounts Manager        https://www.praeses.com/senior-national-accounts-manager/
National Accounts Manager               https://www.praeses.com/national-accounts-manager/
Cloud Architect                         https://www.praeses.com/cloud-architect/
Front-End Developer                     https://www.praeses.com/front-end-developer/
Senior Project Manager (GOV)            https://www.praeses.com/senior-project-manager-gov/

Try with this:

import requests
from bs4 import BeautifulSoup

print("Praeses jobs:")
praeses_url = "https://www.praeses.com/careers/"
praeses_html_text = requests.get(praeses_url).text
praeses_soup = BeautifulSoup(praeses_html_text, 'html.parser')
# print(praeses_soup)
for j in range(1,10):
    try:
        clase = "et_pb_button et_pb_custom_button_icon et_pb_button_"+str(j)+" et_hover_enabled et_pb_bg_layout_dark"
        hola = praeses_soup.findAll("a", {"class": clase})
        print(hola[0].text)
    except:
        print("Its over")
        break
Related