Очистка данных от тега span с классом с использованием BS - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь вычеркнуть названия проектов из Gitlab. Когда я проверяю исходный код, я вижу, что имя проекта находится в:

<span class='project-name'>Project Name</span>

К сожалению, когда я пытаюсь очистить эту дату, я получаю пустой список, мой код выглядит так:

url = 'https://gitlab.com/users/USER/projects'
source = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(source,'lxml')
repos = [repo.text for repo in soup.find_all('span',{'class':'project-name'})]

Я пробовал другие решения, такие как attrs, class_ или другие теги HTML, но ничего не работает. Что тут не так?

1 Ответ

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

Хорошо, похоже, когда вы просматриваете страницу на вкладках сети в chrome инструментах разработчика, вы видите, что проекты не отображаются при выполнении запроса:

enter image description here

Это означает, что информация о проекте запрашивается после. Чтобы получить проекты, вам необходимо отправить запрос на конечную точку https://gitlab.com/users/USER/projects.json:

enter image description here

После этого вы можете проверить ответ с этой конечной точки. Как вы можете видеть, ответ здесь json, поэтому мы можем загрузить json данные с модулем json, а затем в этом словаре есть запись с именем html, в которой есть данные html, поэтому мы можем проанализировать это с BeautifulSoup и остальной код остается прежним:

import bs4 as bs
import urllib, json
url = 'https://gitlab.com/users/USER/projects.json'
source = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(json.loads(source)["html"],'html.parser')
repos = [repo.text for repo in soup.find_all('span',{'class':'project-name'})]
print(repos)

Вывод:

['freebsd', 'freebsd-ports', 'freebsd-test', 'risc-vhdl', 'dotfiles', 'tideyBot']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...