Чтение подстроки в кавычках из массивной строки в Python

У меня есть следующая строка:

{"name":"INPROCEEDINGS","__typename":"PublicationConferencePaper"},"hasPermiss
ionToLike":true,"hasPermissionToFollow":true,"publicationCategory":"researchSu
mmary","hasPublicFulltexts":false,"canClaim":false,"publicationType":"inProcee
dings","fulltextRequesterCount":0,"requests":{"__pagination__":
[{"offset":0,"limit":1,"list":[]}]},"activeFiguresCount":0,"activeFigures":
{"__pagination__":[{"offset":0,"limit":100,"list":
[]}]},"abstract":"Heterogeneous Multiprocessor System-on-Chip (MPSoC) are 
progressively becoming predominant in most modern mobile devices. These 
devices are required to perform processing of applications within thermal,
 energy and performance constraints. However, most stock power and thermal
 management mechanisms either neglect some of these constraints or rely on 
frequency scaling to achieve energy-efficiency and temperature reduction on 
the device. Although this inefficient technique can reduce temporal thermal
 gradient, but at the same time hurts the performance of the executing task.
 In this paper, we propose a thermal and energy management mechanism which 
achieves reduction in thermal gradient as well as energy-efficiency through 
resource mapping and thread-partitioning of applications with online 
optimization in heterogeneous MPSoCs. The efficacy of the proposed approach is 
experimentally appraised using different applications from Polybench benchmark 
suite on Odroid-XU4 developmental platform. Results show 28% performance 
improvement, 28.32% energy saving and reduced thermal variance of over 76%
 when compared to the existing approaches. Additionally, the method is able to
 free more than 90% in memory storage on the MPSoC, which would have been 
previously utilized to store several task-to-thread mapping 
configurations.","hasRequestedAbstract":false,"lockedFields"

Я пытаюсь получить подстроку между "abstract":" и ", "hasRequestedAbstract". Для этого я использую следующий код:

    import requests
    #some more codes here........
    to_visit_url = 'https://www.researchgate.net/publication/328749434_TEEM_Online_Thermal-_and_Energy-Efficiency_Management_on_CPU-GPU_MPSoCs'
    this_page = requests.get(to_visit_url)
    content = str(page.content, encoding="utf-8")
    abstract = re.search('\"abstract\":\"(.*)\",\"hasRequestedAbstract\"', content)
    print('Abstract:\n' + str(abstract))

Но в абстрактной переменной оно содержит значение None. В чем может быть проблема? Как я могу получить подстроку, как указано выше?

Примечание. Хотя кажется, что я могу читать его как объект JSON, но это не вариант, поскольку приведенный выше пример текста представляет собой лишь небольшую часть полного HTML-содержимого, из которого очень трудно извлечь объект JSON.

PS Полное содержимое страницы, т.е. page.content, можно загрузить здесь: https://docs.google.com/document/d/1awprvKsLPNoV6NZRmCkktYwMwWJo5aujGyNwGhDf7cA/edit?usp=sharing

Или источник также можно загрузить непосредственно с URL-адреса: https://www.researchgate.net/publication/328749434_TEEM_Online_Thermal-_and_Energy-Efficiency_Management_on_CPU-GPU_MPSoCs

3 ответа

Решение

Этот ответ не использует регулярное выражение (регулярное выражение), но выполняет свою работу. Ответьте следующим образом:

import re
import requests

def fetch_abstract(url = "https://www.researchgate.net/publication/328749434_TEEM_Online_Thermal-_and_Energy-Efficiency_Management_on_CPU-GPU_MPSoCs"):
    test_requests = requests.get(url)
    index = 0
    inner_count = 0
    while index < len(test_requests.text):
            index = test_requests.text.find('[Show full abstract]</a><span class=\"lite-page-hidden', index)
            if index == -1:
                break
            inner_count += 1
            if inner_count == 4:
                #extract the abstract from here -->
                temp = test_requests.text[index-1:]
                index2 = temp.find('</span></div><a class=\"nova-e-link nova-e-link--color-blue')
                quote_index = temp.find('\">')
                abstract = test_requests.text[index + quote_index + 2 : index - 1 + index2]
                print(abstract)
            index += 52

if __name__ == '__main__':
    fetch_abstract()

Результат:

Гетерогенная многопроцессорная система на кристалле (MPSoC) постепенно становится доминирующей в большинстве современных мобильных устройств. Эти устройства требуются для выполнения обработки приложений в пределах температурных, энергетических и эксплуатационных ограничений. Однако большинство стандартных механизмов управления мощностью и тепловым режимом либо игнорируют некоторые из этих ограничений, либо полагаются на масштабирование частоты для достижения энергоэффективности и снижения температуры на устройстве. Хотя этот неэффективный метод может уменьшить временной тепловой градиент, но в то же время ухудшает производительность выполняемой задачи. В этой статье мы предлагаем механизм управления температурой и энергопотреблением, который обеспечивает снижение температурного градиента, а также энергоэффективность за счет сопоставления ресурсов и разделения потоков приложений с онлайн-оптимизацией в гетерогенных MPSoC. Эффективность предложенного подхода оценивается экспериментально с использованием различных приложений из набора тестов Polybench на платформе разработки Odroid-XU4. Результаты показывают улучшение производительности на 28%, энергосбережение на 28,32% и снижение тепловых колебаний более чем на 76% по сравнению с существующими подходами. Кроме того, этот метод позволяет освободить более 90% памяти в MPSoC, которая ранее использовалась для хранения нескольких конфигураций сопоставления задач с потоками.

re.search не возвращает проанализированный список результатов. Возвращается SRE_Match объект. Если вы хотите получить соответствующий список, вам нужно использовать re.findall метод.

  1. Протестированный код

    import re
    import requests
    
    test_pattern = re.compile('\"abstract\":\"(.*)\",\"hasRequestedAbstract\"')
    test_requests = requests.get("https://www.researchgate.net/publication/328749434_TEEM_Online_Thermal-_and_Energy-Efficiency_Management_on_CPU-GPU_MPSoCs")
    
    print(test_pattern.findall(test_requests.text)[0])
    
  2. Результат

    'Heterogeneous Multiprocessor System-on-Chip (MPSoC) are progressively becoming predominant in most modern mobile devices. These devices are required to perform processing of applications within thermal, energy and performance constraints. However, most stock power and thermal management mechanisms either neglect some of these constraints or rely on frequency scaling to achieve energy-efficiency and temperature reduction on the device. Although this inefficient technique can reduce temporal thermal gradient, but at the same time hurts the performance of the executing task. In this paper, we propose a thermal and energy management mechanism which achieves reduction in thermal gradient as well as energy-efficiency through resource mapping and thread-partitioning of applications with online optimization in heterogeneous MPSoCs. The efficacy of the proposed approach is experimentally appraised using different applications from Polybench benchmark suite on Odroid-XU4 developmental platform. Results show 28% performance improvement, 28.32% energy saving and reduced thermal variance of over 76% when compared to the existing approaches. Additionally, the method is able to free more than 90% in memory storage on the MPSoC, which would have been previously utilized to store several task-to-thread mapping configurations.'
    

Когда вы делаете requests.get(...) Вы должны получить объект запроса?

эти объекты действительно умные, и вы можете использовать встроенный .json() метод возврата строки, которую вы разместили в вопросе, в виде словаря Python.

хотя я отмечаю, что ссылка, которую вы разместили, указывает не на что-то подобное, а на полный HTML-документ. Если вы пытаетесь разобрать такой сайт, вы должны вместо этого взглянуть на beautifulsoup. ( https://www.crummy.com/software/BeautifulSoup/)

Другие вопросы по тегам