Python: извлечение текста из тега скрипта с использованием XPath - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь использовать xpath для доступа к тексту внутри html ниже.

Я написал это утверждение response.xpath (// script / text ()) чтобы раскрыть текст внутри тега. По какой-то причине я не вижу данных ожидаемого текста. Кто-нибудь может увидеть, что я делаю не так?

Method: response.xpath(//script/text())

<script>
digitalData={
                       page:{
                pageInfo:{
                    destinationURL:window.location.href,
                    error:'',
                    language:'en' ,
                    country:'US' ,
                    pageName:'tangelo2' ,
                    articlepubdate:'' ,
                    articleenddate:'' ,
                    pageTitle: 'Health Services Innovation Company',
                    pageOwner:'' ,
                    pageTemplate:'' ,
                    pageCampaign:'',
                    tags:'',
                    pageLastPublishDate:'2020-01-08T12:15:04.032-06:00',
                    pageLastPublishedBy :'admin',
                    pageLastModifiedDate:'2020-01-08T10:24:36.466-06:00',
                    pageLastModifiedBy :'katrina'
                },
               recEngine:{
                    title:'Home',
                    image:'',
                    description:''
                },
                category:{
                    siteName: window.location.hostname.replace("www.", "") ,
                    version:'3.0',

                    contentType: '',

                    contentTopic: '',
                    contentSegment: '',
                    contentInitiative: '',
                    contentProduct: '',
                    contentProductLine: '',


                    primaryCategory:'tangelo2'
                }  
           },
         event:{ }

        };
</script>

1 Ответ

0 голосов
/ 26 января 2020

Кажется, что ваш ответ объект является ответом от какого-то некоторого http.request .

Таким образом, чтобы получить содержимое сценария, порядок необходимых операций следующим образом:

  • txt = Response.content - получить содержимое этого ответа (строка).
  • root = etree.fromstring(txt) - проанализировать эту строку, получив дерево элементов.
  • script = root.xpath('//script')[0].text - получить содержимое скрипта (более подробное описание см. Ниже). Возможно, вам также следует добавить требуемое пространство имен.

Обратите внимание, что ваш код содержит такой недостаток, что вы не смогли заключить свой путь в кавычки (одинарные или двойные). Но даже если вы это сделаете, результатом будет список текстовых узлов, содержащий только 1 элемент.

Мое решение более простое и интуитивно понятное, как оно:

  • читает список совпадающих узлов (root .xpath ('// script') ),
  • берет первый из них ( [0] ) - текстовый узел,
  • извлекает текстовое содержимое из него ( .text ).
...