Python Bs4 не может иметь простой текст внутри чертового текста с двумя интервалами </span></span> - PullRequest
0 голосов
/ 04 февраля 2020

Привет, ребята, так что я пытаюсь почистить сайт Действительно, и пока все работает хорошо, за исключением зарплаты (смеется, конечно).

Так что я далеко не эксперт в запросах, запросах_ html, bs4 и т. Д. После целого часа поисков повсюду я не могу найти ответ на свою конкретную проблему, поэтому вот я ...

Я сократил код, чтобы упростить задачу (я буду очистить больше whatevs) пока что я привел в качестве примера диапазон с .text, который работает нормально, но есть только один диапазон, а не диапазон в диапазоне, как в зарплате:

<div class="salarySnippet salarySnippetDemphasizeholisticSalary">
<span class="salary no-wrap">
<span class="salaryText">
1 900 € - 2 100 € par mois</span>
</span>
</div>

Я француз, так Действительно, во французской версии, если вы хотите попробовать go для Парижа или еще во входных данных:

from bs4 import BeautifulSoup
import requests as req

print("_____Indeed Job Scaper_____")
city = str(input("Enter your city name here: "))

url = ("https://www.indeed.fr/emplois?l=" + city)
u_req = req.get(url)
soup = BeautifulSoup(u_req.content, 'html.parser')
job_elems = soup.find_all('div' , class_='jobsearch-SerpJobCard') 

for job_elem in job_elems:
    compagny_name = job_elem.find('span' , class_="company")
    salary = job_elem.find("span", {"class": "salaryText"})

    print(compagny_name.text)
    print(salary.text)

Если я не прошу напечатать .text на зарплату, я получу:

<span class="salaryText">
1 800 € - 4 000 € par mois</span>

1 Ответ

0 голосов
/ 04 февраля 2020

Похоже, что этот salaryText диапазон не существует для каждой карты. Итак, в вашем l oop вам нужно проверить, существует ли промежуток перед доступом к его внутреннему тексту.

Вот обновленная версия вашего кода:

from bs4 import BeautifulSoup
import requests as req

print("_____Indeed Job Scaper_____")
city = str(input("Enter your city name here: "))

url = ("https://www.indeed.fr/emplois?l=" + city)
u_req = req.get(url)
soup = BeautifulSoup(u_req.content, 'html.parser')
job_elems = soup.find_all('div' , class_='jobsearch-SerpJobCard') 

for job_elem in job_elems:
    compagny_name = job_elem.find('span' , class_="company")
    salary = job_elem.find("span", {"class": "salaryText"})

    print(compagny_name.text)

    # check if salary is not none, before accessing it's text property. 
    if salary: 
        print(salary.text)

Не могли бы вы сообщить мне, работает ли он?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...