callback=self.parse_detail没有
时间: 2023-05-28 16:07:39 浏览: 154
具体的上下文信息不清楚,但是一般来说,如果在 scrapy 的 spider 中,定义了一个 parse_detail 方法,并且希望在某个地方调用该方法,需要使用 callback=self.parse_detail 的方式来调用。
例如,在 spider 的 start_requests 方法中,可以使用如下代码来调用 parse_detail 方法:
```python
def start_requests(self):
urls = [
'http://www.example.com/page1',
'http://www.example.com/page2',
'http://www.example.com/page3',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse_detail)
```
在这个例子中,将会依次发送三个请求,每个请求的回调函数都是 parse_detail。当页面数据返回后,就会执行 parse_detail 方法来处理数据。
相关问题
请帮我将referer_url添加到Request的Referer中,并在Request中使用referer: def parse(self, response): rs = json.loads(response.text) data = rs.get('items') for res_item in data: movie_item = newmovieItem() movie_item['movie_id'] = res_item.get('id') uri = res_item.get('uri') re_url = str(uri).replace("douban://douban.com/movie/", "https://movie.douban.com/subject/") referer_url = re_url + '/' detail_url = str(uri).replace("douban://douban.com/movie/", "https://www.douban.com/doubanapp/dispatch?uri=/movie/") print(detail_url) movie_item['url'] = detail_url yield Request(url=detail_url, callback=self.parse_detail, cb_kwargs={'item': movie_item}, dont_filter=True )
可以使用headers参数来添加Referer,并在Request中使用headers参数传递。修改后的代码如下:
```
def parse(self, response):
rs = json.loads(response.text)
data = rs.get('items')
for res_item in data:
movie_item = newmovieItem()
movie_item['movie_id'] = res_item.get('id')
uri = res_item.get('uri')
re_url = str(uri).replace("douban://douban.com/movie/", "https://movie.douban.com/subject/")
referer_url = re_url + '/'
detail_url = str(uri).replace("douban://douban.com/movie/", "https://www.douban.com/doubanapp/dispatch?uri=/movie/")
print(detail_url)
headers = {'Referer': referer_url}
yield Request(url=detail_url,
callback=self.parse_detail,
cb_kwargs={'item': movie_item},
dont_filter=True,
headers=headers
)
```
if 'https://www.yoojia.com/s-{0}'.startswith('http'): if '{0}' in 'https://www.yoojia.com/s-{0}': detailQueryCondition = [] detailQueryCondition.append(fields["seriesId"]) detailUrlRule = 'https://www.yoojia.com/s-{0}' i = 0 while i < len(detailQueryCondition): detailUrlRule = detailUrlRule.replace('{' + str(i) + '}', str(detailQueryCondition[i])) i += 1 else: detailUrlRule = item['https://www.yoojia.com/s-{0}'] if self.hostname in detailUrlRule: pass else: detailUrlRule = self.protocol + '://' + self.hostname + detailUrlRule fields["laiyuan"] = detailUrlRule yield scrapy.Request(url=detailUrlRule, meta={'fields': fields}, callback=self.detail_parse)
这段代码是一个Scrapy爬虫中的回调函数,用于处理从爬虫发出的请求的响应。它首先检查URL是否以"http"开头,如果是,则检查URL中是否包含"{0}",如果是,则将查询条件添加到列表中,并将URL规则设置为"https://www.yoojia.com/s-{0}",然后使用列表中的查询条件替换URL规则中的占位符。如果URL规则中不包含"{0}",则直接使用item中的URL规则。接着,它检查URL规则中是否包含爬虫的主机名,如果包含,则直接使用该URL规则,否则将其转换为完整的URL,并将其添加到爬取结果的字段中。最后,它使用回调函数detail_parse来处理响应。
阅读全文