2017-07-15 1 views
1

私はScrapyスパイダーがうまく走っています。 私がする必要があるのは、内部の解析メソッドからAPIコールを作成し、同じアイテムの同じメソッドで応答の結果を使用することです。これはどうすればいいですか?唯一の単純なことは、Pythonのリクエストライブラリを使用することですが、これがscrapingで動作し、さらにscrapinghubで動作するかどうかはわかりません。組み込みのソリューションはありますか? 例を示します。治療。要求結果を呼び出しメソッドに返す方法私は、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応答からすべての情報を抽出し、Webサイトの変数が移入された場合、私はこのドメインの電子メールのパターンを取得し、同じ方法で電子メールを生成するためにそれを使用するためにioのハンターへのAPIコールを送信する必要があります。 それが意味することを望む。

+0

リクエストライブラリは非同期ではなく、ブロックされます。私は原子炉(Deferedを生み出す)に直接作業するか、セロリを使って電子メールを送ることを提案します。 –

+0

@AndrésPérez-Albela H何がブロックされますか?あなたは治療でうまくいかない、または全体を遅くすることを意味しますか?また、私は電子メールを送信する必要はありません、私はちょうどこのページからの情報を新たに受信した後のパターンで作業する必要があります。おそらく、同じページに別のメタデータを要求してしまい、非効率的になります。 –

答えて

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

しかし、スクレイピングハブについてはわかりません。このため、私はマネージドスクレイピングプラットフォームを開発しているので、開発者の視点を与えることもできます。

requestsを使用してHTTP(S)リクエストを送信することはまったく問題ないと思います。彼らはHTTP(S)トラフィックがとにかく治療のために許可されるので、それをブロックすることによってセキュリティを得ることはありません。だから、誰かがrequestsでHTTP(S)を使って有害な攻撃をしたいのであれば、同じリクエストをscrapyで呼び出すことができます。

しかし、SMTPが別のポイントかもしれませんが、試してみる必要があります。タスクをスクラップする必要はなく、スパム送信に悪用される可能性があるため、サーバーからのSMTPトラフィックを許可しない可能性があります。ただし、スクラップ処理中にメールを送信するための正当な使用方法(エラーなど)があるため、SMTPがスクラップハブ上で完全に正常である可能性もあります(また、レート制限やスパムに対して何かを使用します)。

関連する問題