Как получить доступ к этому предмету, используя Beautiful Soup - PullRequest
3 голосов
/ 07 июня 2019

Я пытаюсь получить доступ к элементу в

<script type="text/javascript">ReportPopper("http://asd.asd.asd/ReportOutput/asd-asd-41cc-asd-asd.xls");<script>

, используя beautifulsoup, к сожалению, я не уверен, как получить доступ к части ReportPopper и назначить ее переменной, используя Python

Извините, если на этот вопрос уже дан ответ.Я попытался добавить ReportPopper в find ('ReportPopper') и дает мне элемент none.

import requests
import io
import os
from bs4 import BeautifulSoup


participation = requests.post(url=report_post_url,data=request_post_report_form,headers=report_post_headers,stream=True)
print(participation)


soup = BeautifulSoup(participation.text, 'html.parser')

for n in soup.find_all('script'):
    javascript = n['ReportPopper']
    print(javascript)

Я хочу получить конечный результат в виде:

javascript = "http://asd.asd.asd/ReportOutput/asd-asd-41cc-asd-asd.xls"

как мой вывод:

Traceback (most recent call last):
  File "c:\Users\John asd\Documents\GitHub\asd.net\testing.py", line 184, in <module>
    javascript = n['ReportPopper']
  File "C:\Users\John asd\asd\Local\Programs\Python\Python37\lib\site-packages\bs4\element.py", line 1016, in __getitem__
    return self.attrs[key]
KeyError: 'ReportPopper'

Ответы [ 2 ]

1 голос
/ 07 июня 2019

С помощью bs4 4.7.1 вы можете использовать: содержит, если эта строка присутствует в ответе

from bs4 import BeautifulSoup as bs
# r = requests.get(url)
# html - r.content
html = '<script type="text/javascript">ReportPopper("http://asd.asd.asd/ReportOutput/asd-asd-41cc-asd-asd.xls");<script>'
soup = bs(html, 'lxml')
s = soup.select_one('script:contains(ReportPopper)').text
url = s.split('"')[1]
print(url)
1 голос
/ 07 июня 2019

re.compile () возвращает объект регулярного выражения , что означает, что h является объектом регулярного выражения.

Объект регулярного выражения имеет свое собственное совпадение метод с необязательными параметрами pos и endpos:

regex.match (string [, pos [, endpos]])

from bs4 import BeautifulSoup
import  re

html = """<script>ReportPopper("http://asd.asd.asd/ReportOutput/asd-asd-41cc-asd-asd.xls");</script>"""

soup = BeautifulSoup(html, 'lxml')
script = soup.find_all("script")

pattern = re.compile('ReportPopper(.*);')

for i in script:
    strObj = i.text
    match = pattern.search(strObj)
    if match:
        print(strObj.split("ReportPopper(")[1][:-2])

O / P:

"http://asd.asd.asd/ReportOutput/asd-asd-41cc-asd-asd.xls"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...