Есть ли удобный способ получить индекс подраздела на странице? - PullRequest
0 голосов
/ 26 мая 2019

удобно использовать "index-x", чтобы быстро найти подраздел на странице.

например

https://docs.python.org/3/library/re.html#index-2

дает 3-й подраздел в этой странице .

Когда я хочу поделиться местоположением подраздела с другими, как получить индекс удобным способом?

например, как получить индекс подсекции {m,n} без учета индекса-0?

enter image description here

Ответы [ 2 ]

1 голос
/ 26 мая 2019

С помощью bs4 4.7.1 вы можете использовать :has и :contains для нацеливания на определенную текстовую строку и возврата индекса (обратите внимание, что использование select_one вернет первое совпадение. Используйте понимание списка и select, если хотите вернуть все совпадения

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://docs.python.org/3/library/re.html')
soup = bs(r.content, 'lxml')
index = soup.select_one('dl:has(.pre:contains("{m,n}"))')['id']
print(index)

Любая версия: если вам нужен словарь, который отображает специальные символы на индексы. Спасибо @zoe за обнаружение ошибки в моем понимании словаря.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://docs.python.org/3/library/re.html')
soup = bs(r.content, 'lxml')
mappings = dict([(item['id'], [i.text for i in item.select('dt .pre')]) for item in soup.select('[id^="index-"]')])
indices = {i: k for (k, v) in mappings.items() for i in v}
0 голосов
/ 26 мая 2019

Вы ищете index-7.

Вы можете скачать HTML страницы и получить все возможные значения index-something с помощью следующего кода:

import re
import requests
from bs4 import BeautifulSoup

r = requests.get('https://docs.python.org/3/library/re.html')
soup = BeautifulSoup(r.content.decode())

result = [t['id'] for t in soup.find_all(id=re.compile('index-\d+'))]

print(result)

Выход:

['index-0', 'index-1', 'index-2', 'index-3', 'index-4', 'index-5', 'index-6', 'index-7', 'index-8', 'index-9', 'index-10', 'index-11', 'index-12', 'index-13', 'index-14', 'index-15', 'index-16', 'index-17', 'index-18', 'index-19', 'index-20', 'index-21', 'index-22', 'index-23', 'index-24', 'index-25', 'index-26', 'index-27', 'index-28', 'index-29', 'index-30', 'index-31', 'index-32', 'index-33', 'index-34', 'index-35', 'index-36', 'index-37', 'index-38']

Объекты t в понимании списка содержат HTML теги, чей id соответствует регулярному выражению.

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