2016-12-23 76 views
-1

我试图用下面的代码刮网站使用JavaScript和Python

import re 
import requests 

def get_csrf(page): 
    matchme = r'name="csrfToken" value="(.*)" /' 
    csrf = re.search(matchme, str(page)) 
    csrf = csrf.group(1) 
    return csrf 

def login(): 
    login_url = 'https://www.edline.net/InterstitialLogin.page' 

    with requests.Session() as s: 
     login_page = s.get(login_url) 
     csrf = get_csrf(login_page.text) 

     username = 'USER' 
     password = 'PASS' 

     login = {'screenName': username, 
       'kclq': password, 
       'csrfToken': csrf, 
       'TCNK':'authenticationEntryComponent', 
       'submitEvent':'1', 
       'enterClicked':'true', 
       'ajaxSupported':'yes'} 
     page = s.post(login_url, data=login) 
     r = s.get("https://www.edline.net/UserDocList.page?") 
     print(r.text) 

login() 

当我登录到https://www.edline.net/InterstitialLogin.page,这是成功的刮网站,但我的问题是,当我尝试做

r = s.get("https://www.edline.net/UserDocList.page?") 
print(r.text) 

它不会打印预期页面,而是会引发错误。经过进一步测试,我发现即使您尝试从浏览器直接访问该页面,它也会抛出此错误。所以,当我调查页面的源代码,我发现用于链接到我试图刮掉页面的按钮,使用下面的代码

<a href="javascript:submitEvent('viewUserDocList', 'TCNK=headerComponent')" tabindex="-1">Private Reports</a> 

所以基本上我正在寻找一种方式来触发JavaScript代码之上python为了刮去结果页面。

+0

[Python和执行JavaScript刮]的可能的复制(http://stackoverflow.com/questions/41294205/scraping-with-python-and -executing-javascript) –

回答

0

如果没有比这个单一链接更多的上下文来回答这个问题是不可能的。

但是,在javaScript驱动内容生成的情况下,首先要检查的是您的网页在点击该链接时所做的请求。

为此,请查看浏览器控制台中的网络面板。记录所做的请求,特别是XHR请求。然后,你可以尝试复制这个例如与请求库。

含量= requests.get( 'XHR-URL')

+0

我这样做了,我不确定我是否做得对,但我没有看到任何xhr请求... –