2017-11-21 3 views
-1

Ich brauche einen Weg, um alle Chancen aller Veranstaltungen von BuchmachernWie benutze ich scrapy, um angularjs-Websites zu crawlen?

Ich benutze Scrapy + Splash, um den ersten Javascript-geladenen Inhalt der Website zu bekommen. Aber um alle anderen Chancen zu bekommen, muss ich auf "Spagna-Liga Spagnola", "Italia-> Serie A" usw. klicken.

Wie kann ich das tun?

Antwort

1

können Sie Verhalten emulieren, wie ein Scroll oder ein Klick, indem ein JavaScript Skript writting und indem ich Splash das Skript auszuführen, wenn es Ihre Seite macht.

Etwas exemple:

Sie definieren eine JavaScript Funktion, die ein Element in der Seite auswählt und dann Klicks darauf:

(Quelle: splash doc)

-- Get button element dimensions with javascript and perform mouse click. 
_script = """ 
function main(splash) 
    assert(splash:go(splash.args.url)) 
    local get_dimensions = splash:jsfunc([[ 
     function() { 
      var rect = document.getElementById('button').getClientRects()[0]; 
      return {"x": rect.left, "y": rect.top} 
     } 
    ]]) 
    splash:set_viewport_full() 
    splash:wait(0.1) 
    local dimensions = get_dimensions() 
    splash:mouse_click(dimensions.x, dimensions.y) 

    -- Wait split second to allow event to propagate. 
    splash:wait(0.1) 
    return splash:html() 
end 
""" 

Dann, wenn Sie request, ändern Sie die endpoint und setzen Sie es auf "execute", und Sie fügen "lua_script": _script zu args hinzu.

def parse(self, response): 
    yield SplashRequest(response.url, self.parse_elem, 
         endpoint="execute", 
         args={"lua_source": _script}) 

Sie alle Informationen finden über splash Scriptinghere

+0

Es scheint groß. Gibt es eine Möglichkeit, eine Schaltfläche auf diese Weise auszuwählen und anzuklicken: document.querySelectorAll (". Liste-Gruppe> a.list-group-item") [0] .click(); ? – xRobot

Verwandte Themen