【发布时间】:2020-12-03 14:11:55
【问题描述】:
我是 Scrapy 和 Python 的新手。
代码如下:
import scrapy
import json
class MOOCSpider(scrapy.Spider):
name = 'mooc'
start_urls = ['https://www.plurk.com/search?q=italy']
custom_settings = {
'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter',
}
global_id = 1458122036
def parse(self, response):
url = 'https://www.plurk.com/Search/search2'
headers = {
...omitted...
}
for i in range(1,10):
formdata = {
"after_id": str(self.global_id)
}
yield scrapy.FormRequest(url, callback=self.parse_api, formdata=formdata, headers=headers)
def parse_api(self, response):
raw = response.body
data = json.loads(raw)
posts = data["plurks"]
users = data["users"]
l = len(posts)
i = 0
for post in posts:
i = i + 1
if (i == l):
self.global_id = post["plurk_id"]
...omitted code...
yield {
'Author': user_name,
'Body': post['content'],
'app': 'plurk'
}
我遇到的问题是 Scrapy 首先在 for 循环中发出所有请求,然后在 parse_api 中执行代码。 我想做的是让scrapy对for循环进行一次迭代,调用回调函数,等待它返回,然后再进行另一次迭代。
这是因为我下一个请求所需的id将由回调函数设置在global_id变量中。
【问题讨论】:
标签: python asynchronous callback scrapy