Я знаю, что подобные вопросы задавались ранее, но, похоже, ни один из них не подходит для этой конкретной ситуации. Я столкнулся с ним на нескольких сайтах, поэтому для этого вопроса я выбрал случайным образом первую страницу собственного списка тегов SO.
Если вы посмотрите на первую запись на первой странице, вы увидите это:
Показывает начало описания тега, общее количество вопросов и количество вопросов, задаваемых сегодня и на этой неделе. Эта информация легко выбирается:
from selenium.webdriver import Chrome
driver = Chrome()
driver.get('https://stackoverflow.com/tags')
Фокусировка, например, на теге JavaScript
:
dat = driver.find_elements_by_xpath("//*[contains(text(), 'week')]/ancestor::div[5]/div/div[1]/span/parent::*")
for i in dat:
print(i.text)
Выход:
javascript× 1801272
JavaScript (not to be confused with Java) is a high-level, dynamic, multi-paradigm, object-oriented, prototype-based, weakly-typed language used for both client-side and server-side scripting. Its pri…
703 asked today, 4757 this week
Теперь все становится сложнее (по крайней мере, для меня): если вы наведите курсор мыши на тег JavaScript
, вы получите следующее всплывающее окно:
В поле есть полное описание тега и (округленные) числа вопросов и наблюдателей. Если вы наведите курсор мыши на элемент «1.2m watchers», вы увидите эту подсказку:
Это URL для вызова для данного конкретного окна:
https://stackoverflow.com/tags/javascript/popup?_=1556571234452
Этот целевой элемент (а также общее количество вопросов) содержится в title
из span
в этом html:
<div class="-container">
<div class="-arrow js-source-arrow"></div>
<div class="mb12">
<span class="fc-orange-400 fw-bold mr8">
<svg aria-hidden="true" class="svg-icon va-text-top iconFire" width="18" height="18" viewBox="0 0 18 18"><path d="M7.48.01c.87 2.4.44 3.74-.57 4.77-1.06 1.16-2.76 2.02-3.93 3.7C1.4 10.76 1.13 15.72 6.8 17c-2.38-1.28-2.9-5-.32-7.3-.66 2.24.57 3.67 2.1 3.16 1.5-.52 2.5.58 2.46 1.84-.02.86-.33 1.6-1.22 2A6.17 6.17 0 0 0 15 10.56c0-3.14-2.74-3.56-1.36-6.2-1.64.14-2.2 1.24-2.04 3.03.1 1.2-1.11 2-2.02 1.47-.73-.45-.72-1.31-.07-1.96 1.36-1.36 1.9-4.52-2.03-6.88L7.45 0l.03.01z"/></svg>
<span title="1195903">1.2m</span> watchers
</span>
<span class="mr8"><span title="1801277">1.8m</span> questions</span>
<a class="float-right fc-orange-400" href="/feeds/tag/javascript" title="Add this tag to your RSS reader"><svg aria-hidden="true" class="svg-icon iconRss" width="18" height="18" viewBox="0 0 18 18"><path d="M1 3c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3zm14.5 12C15.5 8.1 9.9 2.5 3 2.5V5a10 10 0 0 1 10 10h2.5zm-5 0A7.5 7.5 0 0 0 3 7.5V10a5 5 0 0 1 5 5h2.5zm-5 0A2.5 2.5 0 0 0 3 12.5V15h2.5z"/></svg></a>
</div>
<div>JavaScript (not to be confused with Java) is a high-level, dynamic, multi-paradigm, object-oriented, prototype-based, weakly-typed language used for both client-side and server-side scripting. Its primary use is in rendering and manipulating of web pages. Use this tag for questions regarding ECMAScript and its various dialects/implementations (excluding ActionScript and Google-Apps-Script). <a href="/questions/tagged/javascript">View tag</a></div></div>
Что я не могу понять, так это как собрать всю эту информацию, чтобы получить результат (или фрейм данных), который выглядит примерно так, для всех тегов, упомянутых на этой первой странице:
Tag: JavaScript
Total questions: 1801277 #or whatever it is at the time this is performed
Watchers: 1195902 #same
.
.
etc.
Чтобы исключить возможные комментарии, позвольте мне добавить: я знаю, что у SO есть API для подобных поисков, но (i), как я уже говорил, я выбрал страницу тегов SO случайным образом и хотел бы решить эту проблему. как можно более обобщенно; (ii) если я правильно понимаю, это нельзя сделать с помощью SO API ; и (iii) даже если бы это было возможно, я все же хотел бы узнать, как это сделать, используя методы очистки.