2017-02-08 9 views
12

Mam skrypt w języku Python, który przechwytuje atrybut src elementu <video> na stronie html. Dzięki inspektorowi przeglądarki na filmie wideo this page widzę element wideo, który muszę skrobać, ale przeglądanie źródła strony bezpośrednio pokazuje tylko pliki JavaScript aplikacji ember.Wewnętrzna ramka Scrape HTML

Co należy zrobić, aby uzyskać dostęp do znacznika "ramka wewnętrzna", który zawiera element <video>, aby można było zeskrobać atrybut src?

Zmieniano więc to nie jest tak szeroka

Odpowiedz

7

Nie trzeba iść całą drogę przeglądarka/selenu. Po prostu zrób trochę więcej badań, a zobaczysz, jak to działa:

Dla adresu URL URL https://vine.co/v/i3pQ70vK3iv, chcesz plik json, który opisuje wideo.

Proste zeskrobanie adresu URL: https://archive.vine.co/posts/i3pQ70vK3iv.json. Że powróci plik jak:

{ 
    "username": "Bleacher Report", 
    "userIdStr": "906307026416705536", 
    "postId": 1352573572862066700, 
    "verified": 1, 
    "description": "", 
    "created": "2016-06-09T06:14:43.000000", 
    "permalinkUrl": "https://vine.co/v/i3pQ70vK3iv", 
    "userId": 906307026416705500, 
    "profileBackground": "0x333333", 
    "vanityUrls": [ 
    "BleacherReport" 
    ], 
    "entities": [], 
    "postIdStr": "1352573572862066688", 
    "comments": 293, 
    "reposts": 2384, 
    "videoLowURL": "http://mtc.cdn.vine.co/r/videos_r2/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=oVIxbcFKL5aaqsbMx_q.7wt4zEnhgQ0w", 
    "loops": 19182516, 
    "videoUrl": "http://mtc.cdn.vine.co/r/videos/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=av0W8OaLWSzghq.9__iKdSU4y75FDNg.", 
    "videoDashUrl": "http://mtc.cdn.vine.co/r/videos_dashhd/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=98zVYTYAx16DJka7Oa1yQu20utGrQch9", 
    "thumbnailUrl": "http://v.cdn.vine.co/r/thumbs/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4.jpg?versionId=7LmJNEI3C6bsHkF3t9jqu5k1O2xEHo9l", 
    "explicitContent": 0, 
    "likes": 6593 
} 

Znajdziesz URL filmu się jako atrybut w zwróconej json videoUrl.

2

JS jest uruchamiany na kliencie, aby wypełnić elementy wideo na stronie, więc trzeba mieć sterownik internetowej strona całkowicie zapełnić aby uzyskać dostęp do elementów. Można spróbować selen:

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("https://vine.co/v/i3pQ70vK3iv") 
video = driver.find_element_by_tag_name('video') 
print video.get_attribute('src') 
driver.close() 

Jeśli chcesz uruchomić sterownik „bez głowy” (bez GUI) zobaczyć Is it possible to run selenium (Firefox) web driver without a GUI?