2016-11-06 29 views
0

私はFactivaからPython 3.5.2でデータを取得しています。そして私はデータを見ることができるように学校のログインを使用しなければなりません。Python ScrapyでFactivaデータをクロールする方法は?

私はしかし、私はこのエラーましlogin spider

を作成しようとするために、この記事を踏襲している:これは私のコードである error

を:

# Test Login Spider 
import scrapy 
from scrapy.selector import HtmlXPathSelector 
from scrapy.http import Request 


login_url = "https://login.proxy.lib.sfu.ca/login?qurl=https%3a%2f%2fglobal.factiva.com%2fen%2fsess%2flogin.asp%3fXSID%3dS002sbj1svr2sVo5DEs5DEpOTAvNDAoODZyMHn0YqYvMq382rbRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQAA" 
user_name = b"[my_user_name]" 
pswd = b"[my_password]" 
response_page = "https://global-factiva-com.proxy.lib.sfu.ca/hp/printsavews.aspx?pp=Save&hc=All" 


class MySpider(scrapy.Spider): 
    name = 'myspider' 

    def start_requests(self): 
     return [scrapy.FormRequest(login_url, 
           formdata={'user': user_name, 'pass': pswd}, 
           callback=self.logged_in)] 

    def logged_in(self, response): 
     # login failed 
     if "authentication failed" in response.body: 
      print ("Login failed") 
     # login succeeded 
     else: 
      print ('login succeeded') 
      # return Request(url=response_page, 
      #  callback=self.parse_responsepage) 

    def parse_responsepage(self, response): 
     hxs = HtmlXPathSelector(response) 
     yum = hxs.select('//span/@enHeadline') 


def main(): 
    test_spider = MySpider(scrapy.Spider) 
    test_spider.start_requests() 

if __name__ == "__main__": 
    main() 

これを実行するにはコード、私はプロジェクトのトップディレクトリにターミナルコマンドラインを使用していた:

scrapy runspider [my_file_path]/auth_spider.py 

ここでエラーに対処する方法は知っていますか? response.bodyはタイプbytesでありながら

答えて

2

あなたはPythonの3.xを使用しているとして、"authentication failed"strです。

は、問題を解決するには、 strでテストを実行するには、次の

if "authentication failed" in response.body_as_unicode(): 

またはbytesに:

if b"authentication failed" in response.body: 
+0

は、ああ私の神、それがログイン成功を示しています。私はこの問題を決して解決できないと思った....ありがとう! –

関連する問題