2016-11-06 256 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 

你知道如何处理这里的错误吗?

回答

2

当您使用Python 3.x时,"authentication failed"strresponse.body的类型是bytes

要解决该问题,无论是在str进行测试:

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

bytes

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

噢,我的上帝,它显示登录成功。我以为我永远无法解决这个问题....非常感谢你! –