#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()