2013-09-11 7 views
8

Я пишу скрипт python, который будет извлекать места сценария после разбора с веб-страницы. Допустим, есть два сценария:Получение значения атрибута с помощью BeautifulSoup

<script type="text/javascript" src="http://example.com/something.js"></script> 

и

<script>some JS</script> 

Я смог получить JS от второго сценария, то есть, когда JS записывается в теги.

Но есть ли способ, я мог бы получить значение ЦСИ от первого сценария (т.е. извлечения всех значений Src тегов в сценарии, такие как http://example.com/something.js)

Вот мой код

#!/usr/bin/python 

import requests 
from bs4 import BeautifulSoup 

r = requests.get("http://rediff.com/") 
data = r.text 
soup = BeautifulSoup(data) 
for n in soup.find_all('script'): 
    print n 

Выход: Некоторые JS

Выход Необходимое: http://example.com/something.js

+0

Если вы удовлетворены ответом, пожалуйста, примите ответ, на который вы удовлетворены. –

ответ

22

Он будет получать все src значения, только если они присутствуют. Или же это пропустить бы, что <script> тег

from bs4 import BeautifulSoup 
import urllib2 
url="http://rediff.com/" 
page=urllib2.urlopen(url) 
soup = BeautifulSoup(page.read()) 
sources=soup.findAll('script',{"src":True}) 
for source in sources: 
print source['src'] 

Я получаю следующие два src значения в качестве результата

http://imworld.rediff.com/worldrediff/js_2_5/ws-global_hm_1.js 
http://im.rediff.com/uim/common/realmedia_banner_1_5.js 

Я думаю, это то, что вы хотите. Надеюсь, это полезно.

5

Получить 'src' из узла скрипта.

import requests 
from bs4 import BeautifulSoup 

r = requests.get("http://rediff.com/") 
data = r.text 
soup = BeautifulSoup(data) 
for n in soup.find_all('script'): 
    print "src:", n.get('src') <==== 
+0

Получение результата «Нет». src: None src: None .. Однако, если я делаю n.get ('type'), он показывает мне результат «text/javascript» Почему эта проблема связана с src? –

+0

Хм..Он должен работать, я попробовал это в своей системе. Что такое вывод «n»? – rajpy

+0

Выход «Нет». –

1

Это должно работать, вы просто фильтруете, чтобы найти все теги сценария, а затем определить, есть ли у них атрибут 'src'. Если они делают то URL в JavaScript содержится в атрибуте SRC, в противном случае мы предполагаем, что Javascript в теге

#!/usr/bin/python 

import requests 
from bs4 import BeautifulSoup 

# Test HTML which has both cases 
html = '<script type="text/javascript" src="http://example.com/something.js">' 
html += '</script> <script>some JS</script>' 

soup = BeautifulSoup(html) 

# Find all script tags 
for n in soup.find_all('script'): 

    # Check if the src attribute exists, and if it does grab the source URL 
    if 'src' in n.attrs: 
     javascript = n['src'] 

    # Otherwise assume that the javascript is contained within the tags 
    else: 
     javascript = n.text 

    print javascript 

Этот выход это

http://example.com/something.js 
some JS 
Смежные вопросы