小编sag*_*gar的帖子

Python scrapy ReactorNotRestartable替代品

我一直在尝试用Python创建一个Scrapy具有以下功能的应用程序:

  • 一个REST API(我曾提出,用瓶)监听所有的请求抓取/废料和爬行后返回响应.(爬行部分足够短,所以连接可以保持活动,直到爬行得到完成.)

我可以使用以下代码执行此操作:

items = []
def add_item(item):
    items.append(item)

# set up crawler
crawler = Crawler(SpiderClass,settings=get_project_settings())
crawler.signals.connect(add_item, signal=signals.item_passed)

# This is added to make the reactor stop, if I don't use this, the code stucks at reactor.run() line.
crawler.signals.connect(reactor.stop, signal=signals.spider_closed) #@UndefinedVariable 
crawler.crawl(requestParams=requestParams)
# start crawling 
reactor.run() #@UndefinedVariable
return str(items)
Run Code Online (Sandbox Code Playgroud)

现在我面临的问题是在停止反应堆之后(这对我来说似乎是必要的,因为我不想坚持reactor.run()).第一次请求后我无法接受进一步的请求.第一次请求完成后,我收到以下错误:

Traceback (most recent call last):
  File "c:\python27\lib\site-packages\flask\app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\python27\lib\site-packages\flask\app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e) …
Run Code Online (Sandbox Code Playgroud)

python reactor scrapy flask twisted.internet

8
推荐指数
1
解决办法
767
查看次数

如何在scrapy中禁用缓存?

我正在尝试抓取特定网站上的网页scrapy.Request().对于我发送的不同Cookie,网页会有所不同.

如果我逐个向网页发出请求,它会给我正确的结果,但是当我将这些cookie发送到for循环中时,它会给我相同的结果.我认为scrapy正在为我创建缓存,在第二个请求中它从缓存中获取响应.这是我的代码:

def start_requests(self):
        meta = {'REDIRECT_ENABLED':True}
        productUrl = "http://xyz"
        cookies = [{'name': '', 'value': '=='},{'name': '', 'value': '=='}]
        for cook in cookies:

            header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"}
            productResponse = scrapy.Request(productUrl,callback=self.parseResponse,method='GET',meta=meta,body=str(),cookies=[cook],encoding='utf-8',priority=0,dont_filter=True)
            yield productResponse


def parseResponse(self,response): 
     selector = Selector(response)
     print selector.xpath("xpaths here").extract()
     yield None
Run Code Online (Sandbox Code Playgroud)

我希望print语句应该为这两个请求提供不同的结果.

如果有任何不明确的地方,请在评论中提及.

caching scrapy

6
推荐指数
2
解决办法
4090
查看次数

Flask FileStorage对象到File对象

我已经制作了一个api,通过flask它提交文件,在后端接收后,我想使用python requests模块进一步上传到一个未知的服务器

如果我这样做,服务器接受该文件 -

requests.post(urlToUnknownServer,files={'file':open('pathToFile')})
Run Code Online (Sandbox Code Playgroud)

现在我的要求是通过flask上传文件参数.
在烧瓶中,我将文件作为FileStorage对象.我不想将其保存在我的服务器上,而是直接希望它进一步上传.
所以基本上我想将该FileStorage对象转换为返回open()函数类型file(如果我错了,请在这里纠正我)

我试过用它 -

obj=file(request.files['fileName'].read().encode('string-escape'))
requests.post(urlToUnknownServer,files={'file':obj})
Run Code Online (Sandbox Code Playgroud)

这不起作用.如果不在我的服务器上保存文件,是否可以这样做.

python io flask

6
推荐指数
2
解决办法
5436
查看次数

在java中的构造函数中初始化类变量

我们知道...

实例变量在默认构造函数中初始化.例如.

public class H{
    int x;

    public static void main(String... args){
        System.out.print(new H().x);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的O/P是0, 因为有一个默认构造函数被调用,并且该构造函数将x初始化为0.

现在,我的问题是,如果我们运行以下代码,即

public class H{
        int x;

        public H(){}

        public static void main(String... args){
            System.out.print(new H().x);
        }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,实际的O/P也是0,但我认为应该有编译器错误,x没有被初始化,因为我们已经覆盖了默认的构造函数而没有初始化xI认为我已经让我的问题清楚了..

java constructor instance-variables

1
推荐指数
2
解决办法
612
查看次数

我们可以将嵌套地图作为其他地图中的关键字吗?

我刚刚开始在Java中实现数据结构,并且想知道我们可以有这样的情况.

Map<HashMap<String,String>,String> map = new HashMap<HashMap<String,String>,String>(); 
Run Code Online (Sandbox Code Playgroud)

如果是的话,请举一个小例子.

如果您没有找到相关问题,请在评论中提及,

java collections hashmap map treemap

1
推荐指数
1
解决办法
1578
查看次数