dryscrape:“未找到路线......”

问题描述:

语境dryscrape:“未找到路线......”

我想,因为大多数可用的工具在市场上并没有涵盖所有金融网站尚未编写自己的钱汇集。我在raspberrypi上使用python 2.7.9。

感谢请求库,我设法连接到目前为止我的帐户中的两个帐户(一个贷款网站和一个用于我的养老金)。 我想汇总的第三个网站给我很难从现在2周起,它的名字是https://www.amundi-ee.com

我发现这个网站实际上是在使用JavaScript,经过很多研究,我最终使用了dryscrape(我不能使用硒因为Arm不再被支持)。

问题

运行此代码:

import dryscrape 

url='https://www.amundi-ee.com' 
extensionInit='/psf/#login' 
extensionConnect='/psf/authenticate' 
extensionResult='/psf/#' 
urlInit = url + extensionInit 
urlConnect = url + extensionConnect 
urlResult = url + extensionResult 

s = dryscrape.Session() 
s.visit(urlInit) 
print s.body() 
login = s.at_xpath('//*[@id="identifiant"]') 
login.set("XXXXXXXX") 
pwd = s.at_xpath('//*[@name="password"]') 
pwd.set("YYYYYYY") 
# Push the button 
login.form().submit() 
s.visit(urlConnect) 
print s.body() 
s.visit(urlResult) 

有一个问题,当代码访问urlConnect线21,22返回身体下面的印刷行:

{"code":405,"message":"No route found for \u0022GET \/authenticate\u0022: Method Not Allowed (Allow: POST)","errors":[]} 

问题

为什么我有这样的错误信息,如何正确登录到网站以检索我正在查找的数据?

PS:我的代码的灵感来源于此问题 Python dryscrape scrape page with cookies

+0

登录后使用time.sleep(5)。然后再试一次,并告诉是否发生错误 – Exprator

+0

对不起,我不能在早些时候测试它,不幸的是,登录后登录后(login.form()。submit())问题仍然存在(我也尝试将时间加倍) –

+0

做在登录表单提交之后的一件事情,打印当前网址,如s.url(),并检查网址是否是你想要抓取的网址。然后将其存储在一个变量然后s.visit(url),因为如果你尝试访问一个被登录保护的页面,它会给出错误 – Exprator

确定,所以试图解决这个下跌一个多月之后,我很高兴地说,我终于设法得到我想要的

问题是什么?

基本上2点重要的事情(也许更多,但我可能会之间忘记了):

  1. 密码必须通过按钮来推,而这些都是随机生成的 所以每次你访问你需要做的时间新的映射
  2. login.form().submit()是围绕获取所需的数据页搞乱,通过点击验证按钮是足够好的

下面是最后的代码,不hesitat e,如果你发现一个不好的用法,因为我是一个python新手和一个零星的编码器。

import dryscrape 
from bs4 import BeautifulSoup 
from lxml import html 
from time import sleep 
from webkit_server import InvalidResponseError 
from decimal import Decimal 
import re 
import sys 


def getAmundi(seconds=0): 

    url = 'https://www.amundi-ee.com/psf' 
    extensionInit='/#login' 
    urlInit = url + extensionInit 
    urlResult = url + '/#' 
    timeoutRetry=1 

    if 'linux' in sys.platform: 
     # start xvfb in case no X is running. Make sure xvfb 
     # is installed, otherwise this won't work! 
     dryscrape.start_xvfb() 

    print "connecting to " + url + " with " + str(seconds) + "s of loading wait..." 
    s = dryscrape.Session() 
    s.visit(urlInit) 
    sleep(seconds) 
    s.set_attribute('auto_load_images', False) 
    s.set_header('User-agent', 'Google Chrome') 
    while True: 
     try: 
      q = s.at_xpath('//*[@id="identifiant"]') 
      q.set("XXXXXXXX") 
     except Exception as ex: 
      seconds+=timeoutRetry 
      print "Failed, retrying to get the loggin field in " + str(seconds) + "s" 
      sleep(seconds) 
      continue 
     break 

    #get password button mapping 
    print "loging in ..." 
    soup = BeautifulSoup(s.body()) 
    button_number = range(10) 
    for x in range(0, 10): 
    button_number[int(soup.findAll('button')[x].text.strip())] = x 

    #needed button 
    button_1 = button_number[1] + 1 
    button_2 = button_number[2] + 1 
    button_3 = button_number[3] + 1 
    button_5 = button_number[5] + 1 

    #push buttons for password 
    button = s.at_xpath('//*[@id="num-pad"]/button[' + str(button_2) +']') 
    button.click() 
    button = s.at_xpath('//*[@id="num-pad"]/button[' + str(button_1) +']') 
    button.click() 
    .............. 

    # Push the validate button 
    button = s.at_xpath('//*[@id="content"]/router-view/div/form/div[3]/input') 
    button.click() 
    print "accessing ..." 
    sleep(seconds) 

    while True: 
     try: 
      soup = BeautifulSoup(s.body()) 
      total_lended = soup.findAll('span')[8].text.strip() 
      total_lended = total_lended = Decimal(total_lended.encode('ascii','ignore').replace(',','.').replace(' ','')) 
      print total_lended 

     except Exception as ex: 
      seconds+=1 
      print "Failed, retrying to get the data in " + str(seconds) + "s" 
      sleep(seconds) 
      continue 
     break 

    s.reset()