#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()
возвращает aResultSet
, у него нет.get_text()
метода. Вам нужно перебрать каждый элемент этогоResultSet
и позвонить.get_text()
по отдельности.5. Хорошо. Так вот почему Python сказал мне » AttributeError: объект ResultSet не имеет атрибута «get_text». Вероятно, вы рассматриваете список элементов как один элемент. Вы позвонили в find_all (), когда собирались позвонить в find ()? » Большое вам спасибо. это было очень полезно!