(
self,
*,
spider: Spider,
opts: argparse.Namespace,
response: Response | None = None,
)
| 303 | return scraped_data |
| 304 | |
| 305 | def _get_callback( |
| 306 | self, |
| 307 | *, |
| 308 | spider: Spider, |
| 309 | opts: argparse.Namespace, |
| 310 | response: Response | None = None, |
| 311 | ) -> CallbackT: |
| 312 | cb: str | CallbackT | None = None |
| 313 | if response: |
| 314 | cb = response.meta["_callback"] |
| 315 | if not cb: |
| 316 | if opts.callback: |
| 317 | cb = opts.callback |
| 318 | elif response and opts.rules and self.first_response == response: |
| 319 | cb = self.get_callback_from_rules(spider, response) |
| 320 | if not cb: |
| 321 | raise ValueError( |
| 322 | f"Cannot find a rule that matches {response.url!r} in spider: " |
| 323 | f"{spider.name}" |
| 324 | ) |
| 325 | else: |
| 326 | cb = "parse" |
| 327 | |
| 328 | if not callable(cb): |
| 329 | assert cb is not None |
| 330 | cb_method = getattr(spider, cb, None) |
| 331 | if callable(cb_method): |
| 332 | cb = cb_method |
| 333 | else: |
| 334 | raise ValueError( |
| 335 | f"Cannot find callback {cb!r} in spider: {spider.name}" |
| 336 | ) |
| 337 | assert callable(cb) |
| 338 | return cb |
| 339 | |
| 340 | def prepare_request( |
| 341 | self, spider: Spider, request: Request, opts: argparse.Namespace |
no test coverage detected