Как я могу получить целое число со страниц indeed

#python #web-scraping

Вопрос:

Я пытаюсь создать веб-скребок после прохождения курса Python. И у меня есть проблема с пониманием структуры веб-страницы. Чтобы составить список номеров страниц, мне нужно извлечь веб-страницу формы interger. Но теперь структура веб-страницы изменилась. Все номера <li> записаны . но каждый из них отмечен по-разному. Например, промежуточный 1 находится в <b> теге, а остальные в <a> теге В этом случае, как лучше всего извлечь эти промежуточные с помощью кода в одну строку?

Я пытался с:

 pagination = indeed_soup.find("ul", {"class": "pagination-list"})["aria-label"]
pagination = indeed_soup.find("ul", {"class": "pagination-list"}).get_text
 

Но я не могу получить правильного результата.
Пожалуйста, если есть какие-то идеи, помогите мне.
Спасибо

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

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

1. Можете ли вы поделиться URL-адресом?

2. Конечно! es.indeed.com/…

Ответ №1:

Чтобы получить номера из навигации по страницам, вы можете использовать следующий пример:

 import requests
from bs4 import BeautifulSoup

url = "https://es.indeed.com/ofertas?as_and=pythonamp;as_phr=amp;as_any=amp;as_not=amp;as_ttl=amp;as_cmp=amp;jt=allamp;st=amp;salary=amp;radius=25amp;l=Españaamp;fromage=anyamp;limit=50amp;sort=amp;psf=advsrchamp;from=advancedsearch"
soup = BeautifulSoup(requests.get(url).content, "html.parser")

print(
    [
        int(t)
        for li in soup.select(".pagination-list li")
        if (t := li.get_text(strip=True))
    ]
)
 

С принтами:

 [1, 2, 3, 4, 5]
 

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

1. Большое спасибо. Но я новичок и не могу понять некоторые из них. «t» int(t) работает как переменная??

2. @SeowooJang soup.select(".pagination-list li") -это селектор CSS -> он выбирает все > <li> теги под тегом с. class="pagination-list" Затем он перебирает выбранные теги и вызывает .get_text() их для получения текста из тегов.

3. Хорошо. теперь я понимаю. Но у меня есть один вопрос. Прежде чем я задам этот вопрос. Я написал прямо это. URL-адрес = » es.indeed.com/… » indeed_info = запросы.получить(URL-адрес) indeed_soup = BeautifulSoup(indeed_info.текст «в HTML.парсер») пагинация = indeed_soup.найти(«ул», {«класс»: «разбиение на страницы-списка»}) = страниц пагинации.find_all(«ли»).get_text() печати(стр.) Но я не работал, есть ли какие-либо проблемы в моем коде??

4. @SeowooJang Да, .find_all() возвращает a ResultSet , у него нет .get_text() метода. Вам нужно перебрать каждый элемент этого ResultSet и позвонить .get_text() по отдельности.

5. Хорошо. Так вот почему Python сказал мне » AttributeError: объект ResultSet не имеет атрибута «get_text». Вероятно, вы рассматриваете список элементов как один элемент. Вы позвонили в find_all (), когда собирались позвонить в find ()? » Большое вам спасибо. это было очень полезно!