1
多分私は何かが簡単でないので、私は希望これは簡単な質問です。私はScrapyを使ってディレクトリリストを解析し、適切なWebページ(実際にはテキストファイル)をプルダウンし、Pythonを使って解析します。クローラ内のリクエストリストからの集計データ
各ページには私が興味を持っているデータセットがあり、各ページでそのようなアイテムに遭遇するたびにグローバル辞書を更新します。
のようなものは、すべての要求呼び出しが完了したときに集計サマリーを出力するだけですが、yield
コマンドを実行しても何も実行されません。 yield
が実際にジェネレータを返すので、私は推測しています。
可能であれば、Request
オブジェクトごとにファイルを書くことを避けたいのですが...私はむしろ、このPythonスクリプト内に自己完結しています。
from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from scrapy.http import Request
slain = {}
class GameSpider(BaseSpider):
name = "game"
allowed_domains = ["example.org"]
start_urls = [
"http://example.org/users/deaths/"
]
def parse(self, response):
links = response.xpath('//a/@href').extract()
for link in links:
if 'txt' in link:
l = self.start_urls[0] + link
yield Request(l, callback=self.parse_following, dont_filter=True)
# Ideally print out the aggregate after all Requests are satisfied
# print "-----"
# for k,v in slain.iteritems():
# print "Slain by %s: %d" % (k,v)
# print "-----"
def parse_following(self, response):
parsed_resp = response.body.rstrip().split('\n')
for line in parsed_resp:
if "Slain" in line:
broken = line.split()
slain_by = broken[3]
if (slain_by in slain):
slain[slain_by] += 1
else:
slain[slain_by] = 1
ありがとうございました!私はコールバック関数を探していたが、何らかの理由でこれを見つけることができなかった。 – espais