Beautifulsoup не извлекает информацию из - PullRequest
0 голосов
/ 28 октября 2019

Мне нужен способ получить информацию с веб-страницы. Эта информация хранится в теге <script>, и я не могу найти способ ее извлечь. Вот последняя итерация кода, который я использовал.

for link in urls:
    driver.get(link)
    #print(driver.title)
    content = driver.page_source
    soup = BeautifulSoup(content, features="html.parser")
    for a in soup.findAll(string=['script', "EM.", "productFullPrice"]):
        print (a)
        name=a.find(string=['EM.sef_name'])
        print(name);

print (a) и print (name) ничего не возвращают.

Исходный код, который я хочу очистить, выглядит следующим образом:

 <script type="text/javascript">
        var EM = EM || {};
        EM.CDN = 'link1';
        EM.something = value; 

1 Ответ

0 голосов
/ 28 октября 2019

Если вам нужен текст внутри тега, вы не можете просто передать «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;']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...