Проблема с сайтами поиска работы в Интернете

#python #web-scraping

#python #веб-очистка

Вопрос:

Я просматриваю веб-сайт Monster Job с поиском, нацеленным на «Разработчик программного обеспечения», и моя цель — просто распечатать только те задания, в описании которых в терминале Python указан «python», отбрасывая при этом все остальные задания для Java, HTML, CSS и т. Д. Однако, когда я запускаю этот код, я в конечном итоге печатаю все задания на странице. Чтобы решить эту проблему, я создал переменную (называемую ‘search’), которая выполняет поиск всех заданий с помощью ‘python’ и преобразует ее в нижний регистр. Также я создал переменную (называемую ‘python_jobs’), которая включает в себя все списки вакансий на странице.

Затем я создал цикл «for», который ищет каждый экземпляр, где «search» находится в «python_jobs». Однако это дает тот же результат, что и раньше, и в любом случае выводит все списки вакансий на странице. Есть предложения?

 import requests
from bs4 import BeautifulSoup

URL = "https://www.monster.com/jobs/search/?q=Software-Developer"
page = requests.get(URL)
print(page)

soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="ResultsContainer")

search = results.find_all("h2", string=lambda text: "python" in text.lower())
python_jobs = results.find_all("section", class_="card-content")

print(len(search))

for search in python_jobs:
    title = search.find("h2", class_="title")
    company = search.find("div", class_="company")
    if None in (title, company):
        continue
    print(title.text.strip())
    print(company.text.strip())
    print()
 

Комментарии:

1. сначала вы могли бы использовать print() , чтобы увидеть значения в переменных и какая часть кода выполняется — она вызывается "print debuging" — возможно title, company , нет None , поэтому он не пропустит ее

2. вы оцениваете элементы с python помощью переменной search to, но вы никогда не используете ее — вы используете только python_jobs и вы присваиваете ей ту же переменную search , чтобы она удаляла предыдущее содержимое search . возможно, вам следует использовать for item in search вместо for search in python_jobs . ИЛИ, может быть, вам следует работать по-другому — сначала results найдите все элементы, в которых есть h2 with python, а затем используйте эти элементы (вместо reasults этого) для поиска разделов и другой информации.

Ответ №1:

Ваша проблема в том, что у вас есть два отдельных списка search , python_jobs которые не связаны. И позже вы даже не используете list search . Вы должны скорее получать каждый элемент из python_jobs и искать python внутри этого элемента.

 import requests
from bs4 import BeautifulSoup

URL = "https://www.monster.com/jobs/search/?q=Software-Developer"
page = requests.get(URL)
print(page)

soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="ResultsContainer")

all_jobs = results.find_all("section", class_="card-content")

for job in all_jobs:
    python = job.find("h2", string=lambda text: "python" in text.lower())
    if python:
        title = job.find("h2", class_="title")
        company = job.find("div", class_="company")
        print(title.text.strip())
        print(company.text.strip())
        print()
 

или

 import requests
from bs4 import BeautifulSoup

URL = "https://www.monster.com/jobs/search/?q=Software-Developer"
page = requests.get(URL)
print(page)

soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="ResultsContainer")

all_jobs = results.find_all("section", class_="card-content")

for job in all_jobs:
    title = job.find("h2")
    if title:
        title = title.text.strip()
        if 'python' in title.lower():
            company = job.find("div", class_="company").text.strip()
            print(title)
            print(company)
            print()