2016-11-06 6 views
0

Ich arbeite daran, die Daten von Factiva in Python 3.5.2 zu bekommen. Und ich muss die Schulanmeldung verwenden, damit ich die Daten sehen kann.Wie Crawl Factiva Daten mit Python Scrapy?

ich diesen Beitrag verfolgt haben, um zu versuchen login spider

jedoch zu schaffen, ich habe diesen Fehler: error

Dies ist mein Code:

# 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() 

Um dies zu laufen Code, ich benutzte Terminal-Befehlszeile im obersten Verzeichnis des Projekts:

scrapy runspider [my_file_path]/auth_spider.py 

Wissen Sie, wie Sie hier mit den Fehlern umgehen?

Antwort

2

Wie Sie Python 3.x verwenden, ist "authentication failed" ein str während response.body vom Typ bytes.

das Problem zu beheben, führen Sie entweder den Test in str:

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

oder in bytes:

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

Oh mein Gott, es zeigt Login Erfolg. Ich dachte, ich könnte dieses Problem nie lösen .... Vielen Dank !! –