Scrapy不在OBD网站上工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy不在OBD网站上工作相关的知识,希望对你有一定的参考价值。

我正在尝试在oneblockdown.it上使用scrapy-spider来获取最新产品的所有产品并将它们存储到数据库中。

我的监视器中的某些站点正在运行,但OBD之类的某些站点无法正常工作,并且没有向数据库上传任何内容。这是我的功能:

class OneBlockDownSpider(Spider):

name = "OneBlockDownSpider"
allowded_domains = ["oneblockdown.it"]
start_urls = [OneBlockDownURL]

def __init__(self):
    logging.critical("OneBlockDown STARTED.")

def parse(self, response):
    products = Selector(response).xpath("//div[@id='product-list']")

    for product in products:
        item = OneBlockDownItem()
        item['name'] = product.xpath('.//div[@class="catalogue-product-title"]//h3').extract.first
        item['link'] = product.xpath('.//div[@class="catalogue-product-title"]//h3/a/@href').extract.first
        # # item['image'] = "http:" + product.xpath("/div[@class='catalogue-product-cover']/a[@class='catalogue-product-cover-image']/img/@src").extract()[0]
        # item['size'] = '**NOT SUPPORTED YET**'
        yield item

    yield Request(OneBlockDownURL, callback=self.parse, dont_filter=True, priority=15)

我想我使用了错误的xpath,但我无法解决它

答案

首先,该网站受Cloudflare保护(防止刮擦)。

您的代码也有几个问题:

  1. 你的products是一个单一的节点
  2. 你使用的是extract.first而不是extract_first() products = response.xpath("//div[@id='product-list']/div") for product in products: item = OneBlockDownItem() item['name'] = product.xpath('.//div[@class="catalogue-product-title"]//h3').extract_first() item['link'] = product.xpath('.//div[@class="catalogue-product-title"]//h3/a/@href').extract_first() yield item
另一答案

使用像产品这样的相对选择器时,应该使用'.'启动所有xpath:

item['image'] = "http:" + product.xpath("./div[@class='catalogue-product-cover']/a[@class='catalogue-product-cover-image']/img/@src").extract()[0]

否则,它将尝试使用此xpath获取元素:/body/div[@class='catalogue-product-cover']

以上是关于Scrapy不在OBD网站上工作的主要内容,如果未能解决你的问题,请参考以下文章

代码在小提琴上工作,但不在网站上[重复]

@font-face 不在客户网站上工作?

scrapy主动退出爬虫的代码片段(python3)

scrapy按顺序启动多个爬虫代码片段(python3)

为啥我的网站图标不在服务器上工作,但在本地工作?

Regexp_like 在调试器网站上工作,但不在 Oracle SQL Developer 上工作