bs4 не получает все элементы списка - PullRequest
2 голосов
/ 03 мая 2020

Используя следующий URL в качестве примера, код получает только 35 элементов вместо 85, перечисленных на странице. Это тот случай, когда нужно использовать селен для загрузки страницы с исходным видом? Как может bs4 пропустить остальные элементы li?

r = requests.get(url=url)
soup = bs(r.text, 'html.parser')
jobkeys = []
jobs = soup.findAll("li", {"class": "cmp-JobListItem"})
for job in jobs:
    s = job.attrs.get('data-tn-entityid')
    jobkey = s[s.find(',')+1:s.rfind(',')]
    jobkeys.append(jobkey)

Редактировать:

Используя селен, я смог «увидеть», что происходит, когда страница загружается. URL автоматически перенаправляется на предварительно отфильтрованный мобильный сайт.

С этим новым сайтом я могу удалить фильтр, получить новый URL и получить правильный номер.

Спасибо!

1 Ответ

2 голосов
/ 03 мая 2020

Я должен быть честным: я попробовал ваш код, поскольку вы написали его несколько раз, и у меня есть список из 85 пунктов: ни больше, ни меньше. Поэтому я не знаю точно, как ответить на второй вопрос, но я могу ответить на первый: нет, вам не нужно использовать другие пакеты для достижения того, чего вы хотите: проблема в другом. Просто чтобы быть уверенным, я собираюсь скопировать сюда полный код, который я только что запустил:

from bs4 import BeautifulSoup as bs
import requests

r = requests.get(url='https://ca.indeed.com/cmp/Abb/jobs')
soup = bs(r.text, 'html.parser')
jobkeys = []
jobs = soup.findAll("li", {"class": "cmp-JobListItem"})
for job in jobs:
    s = job.attrs.get('data-tn-entityid')
    jobkey = s[s.find(',')+1:s.rfind(',')]
    jobkeys.append(jobkey)

print(len(jobkeys))

Вывод:

85
...