Если вам нужен текст внутри тега, вы не можете просто передать «EM» строковому тегу, потому что он ищет строку, которая точно соответствует «EM». Это также означает, что он также не будет соответствовать тегу script
и будет искать только строку script
внутри самого тега. Чтобы получить узел, вам нужно передать script
как узел в функцию findAll
. Если вы посмотрите на текстовое значение того, что находится между тегом скрипта, оно будет выглядеть так: "\n var EM = EM || {};\n EM.CDN = 'link1';\n EM.something = value; \n "
. Поэтому он не найдет EM
, потому что EM
не совпадает с той строкой, которую я разместил выше. Есть несколько способов, которыми вы можете сделать это, вот один, который я выбрал, чтобы помочь вернуть значения, аналогичные тем, которые вы опубликовали:
import bs4
html_string = '''
<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
</script>
'''
wanted_strings= string=["EM.", "productFullPrice"]
soup = bs4.BeautifulSoup(html_string, features="html.parser")
wanted=[]
test = soup.findAll('script')
for word in wanted_strings:
for tag in test:
if word in tag.text:
wanted.append(tag)
wanted
, который затем даст вам строки сценария в списке, подобном этому, с тегамикоторые содержат нужные вам строки
[<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
</script>]
Еще один способ сделать это - просто найти тег, а затем поместить каждую строку кода в список
import bs4
html_string = '''
<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
</script>
'''
soup = bs4.BeautifulSoup(html_string, features="html.parser")
test = soup.findAll('script')
blah = [x.strip() for x in test[0].text.split('\n') if x.strip()]
blah
, который дает вам что-то вродеэто может быть проще для поиска того, что вам нужно, в зависимости от вашего варианта использования
['var EM = EM || {};', "EM.CDN = 'link1';", 'EM.something = value;']