python - Scrapy 不遵循给定的请求
问题描述
# -*- coding: utf-8 -*-
import logging
import scrapy
from scrapy.shell import inspect_response
class SuvlistingsSpider(scrapy.Spider):
name = 'SuvListings'
allowed_domains = ['https://www.gumtree.com.au']
start_urls = [
'https://www.gumtree.com.au/s-cars-vans-utes/sydney/carbodytype-suv/forsaleby-ownr/c18320l3003435/',
]
def parse(self, response):
self.log('Received response for listings page', level=logging.INFO)
main = response.css('.panel-body.panel-body--flat-panel-shadow.user-ad-collection__list-wrapper')[-1]
for a in main.css('a'):
req = response.follow(a, callback=self.parse_item)
yield req
def parse_item(self, response):
0/0
yield {
'price': response.xpath('normalize-space(//div[@id="ad-price"]/div/span[1])').extract(),
}
上面的代码不会触发异常。我让它在 Pycharm 的调试中运行。它是一个锚选择器,如scrapy 网站上的教程中所述,但没有任何内容被刮掉。这里有什么问题?
解决方案
allowed_domains
您必须只指定一个没有方案的域 (www.gumtree.com.au) 。否则,scrapy 会阻止所有“异地”请求,认为他们的域与允许的域不匹配。
推荐阅读
- emacs - 删除返回文件名的后缀
- shell - 在shell中循环浮动值增量
- git - Jenkins not recognizing the git sub-directory
- c - 程序无法加载共享库 GCC
- javascript - 使用cropper.js 和Django 2.2.7 上传裁剪的图片失败
- ffmpeg - 如何通过 URL 重定向下载 m3u8 播放列表?(blob URL、HydraX、JW Player 版本 8.4.2)
- linux - 无法从 git 命令验证 TFS
- kubernetes - 为我的服务(kubernetes、nginx-ingress、letsencrypt、cert-manager)配置 https 的正确方法是什么?
- java - 我们如何获得左右子数组和相同的数组的索引‽
- php - 在没有 WAMP 或 XAMPP 的 IIS 上托管 PHP 应用程序