2017-07-15 51 views
1

我的Scrapy蜘蛛运行良好。 我需要做的是从解析方法内部进行API调用,并使用相同方法的相同方法使用响应结果。我该怎么做呢?唯一简单的想法是使用python请求库,但我不确定这是否适用于scrapy,而且在scrapinghub。有没有内置的解决方案? 这里是一个例子。Scrapy。如何将请求结果返回给调用方法?我可以在scrapy中使用python请求库吗?

def agency(self, response): 
    # inspect_response(response, self) 

    agents = response.xpath('//a[contains(@class,"agency-carousel__item")]') 

    Agencie_Name = response.xpath('//h1[@class = "agency-header__name"]/text()').extract_first() 
    Business_Adress = response.xpath('//div[@class = "agency-header__address"]//text()').extract() 
    Phone = response.xpath('//span[@class = "modal-item__text"]/text()').extract_first() 
    Website = response.xpath('//span[@class = "modal-item__text"][contains(text(),"Website")]/../@href').extract_first() 

    if Website: 
     pass 
     # 1 send request to hunter io and get pattern. Apply to entire team. Pass as meta 
     # do smth with this pattern in here using info from this page. 

所以在这里我normaly提取scrapy响应的所有信息,如果填充网站可变我需要发送API调用来猎人io来获取电子邮件模式该域,并用它来生成相同的方法电子邮件。 希望能够让你感觉到。

+0

请求库不是异步的,它会阻塞。我建议直接与反应堆工作(产生一个Deffered)或使用Celery发送电子邮件。 –

+0

@AndrésPérez-Albela H什么会阻止?你的意思是它不适用于scrapy或将减慢整个事情?此外,我不需要发送电子邮件,我只需要使用此页面中的信息与新收到的模式一起工作。所以可能会发送另一个元数据请求到同一页面,这使得它效率不高。 –

回答

1

对于自己的PC /服务器上的香草草莓,访问刮板内的第三方库没有任何问题。你可以做任何你想做的事情,所以这样的事情根本没有问题(它可以使用requests从API获取邮件地址,然后使用smtplib发送邮件)。

import requests 
import smtplib 
from email.mime.text import MIMEText 

[...] 
    if Website: 
     r = requests.get('https://example.com/mail_for_site?url=%s' % Website, auth=('user', 'pass')) 
     mail = r.json()['Mail'] 

     msg = MIMEText('This will be the perfect job offer for you. ......') 

     msg['Subject'] = 'Perfect job for you!' 
     msg['From'] = '[email protected]' 
     msg['To'] = mail 
     s = smtplib.SMTP('example.com') 
     s.sendmail('[email protected]', [mail], msg.as_string()) 

但是,至于scrapinghub我不知道。为此,我可以给你一个开发人员的观点,因为我还开发了一个托管的抓取平台。

我假设使用requests发送HTTP(S)请求根本不会有任何问题。它们不会通过阻止获得安全性,因为无论如何都允许scrapy允许HTTP(S)通信。所以如果有人想通过HTTP(S)与requests进行有害的攻击,他们可以用scrapy调用相同的请求。

但是,SMTP可能是另一点,你必须尝试。他们可能不允许来自他们服务器的SMTP流量,因为它不需要抓取任务,并且可能被滥用发送垃圾邮件。但是,由于在抓取过程中发送邮件的合法用途(例如错误),SMTP也可能完全适用于scrapinghub(并且它们采用速率限制或针对垃圾邮件的其他措施)。