0

与本地版本相比,我在 Scrapy 云上部署的爬虫产生了意想不到的结果。我的本地版本可以轻松提取产品项目的每个字段(来自在线零售商),但在 scrapy 云上,字段“配料”和字段“价格列表”始终显示为空。您将在附有图片的图片中看到我总是空的两个元素,而它完美地工作我使用 Python 3 并且堆栈配置了 scrapy:1.3-py3 配置。我首先认为这是正则表达式和 unicode 的问题,但似乎不是。所以我尝试了一切:你,你的 RE.ENCODE .... 并没有工作。

对于成分部分,我的代码如下:

    data_box=response.xpath('//*[@id="ingredients"]').css('div.information__tab__content *::text').extract()
    data_inter=''.join(data_box).strip()

    match1=re.search(r'([Ii]ngr[ée]dients\s*\:{0,1})\s*(.*)\.*',data_inter)
    match2=re.search(r'([Cc]omposition\s*\:{0,1})\s*(.*)\.*',data_inter)


    if match1:
        result_matching_ingredients=match1.group(1,2)[1].replace('"','').replace(".","").replace(";",",").strip()

    elif match2 : 
        result_matching_ingredients=match2.group(1,2)[1].replace('"','').replace(".","").replace(";",",").strip()

    else:
        result_matching_ingredients=''

    ingredients=result_matching_ingredients

似乎匹配从未发生在scrapy cloud上。

对于价格,我的代码如下:

    list_prices=[]

    for package in list_packaging : 
        tonnage=package.css('div.product__varianttitle::text').extract_first().strip()
        prix_inter=(''.join(package.css('span.product__smallprice__text').re(r'\(\s*\d+\,\d*\s*€\s*\/\s*kg\)')))
        prix=prix_inter.replace("(","").replace(")","").replace("/","").replace("€","").replace("kg","").replace(",",".").strip()

        list_prices.append(prix)

那是同一个故事。还是空的。

我再说一遍:它在我的本地版本上运行良好。这两个数据是唯一引起问题的数据:我正在使用scrapy cloud提取一堆其他数据(也使用正则表达式),我对此非常满意?

有什么想法吗?

在此处输入图像描述

4

2 回答 2

1

我经常使用 ScrapingHub,通常我的调试方式是:

  1. 检查作业请求(通过 ScrapingHub 接口)

为了检查是否没有使页面略有不同的重定向,例如查询字符串?lang=en

  1. 检查作业日志(通过 ScrapingHub 界面)

您可以打印或使用记录器通过解析器检查您想要的所有内容。因此,如果您真的想确保刮板在本地机器和 ScrapingHub 上显示相同,您可以print(response.body)比较可能导致这种差异的原因。

如果你找不到,我会尝试在 ScrapingHub 上部署一个小蜘蛛,如果我今天能有时间的话,我会编辑这篇文章!

于 2018-07-29T09:11:52.000 回答
1

即使堆栈已在项目的 yml 文件中正确设置,请检查 Scrapping Hub 的日志是否显示预期的 Python 版本。

于 2018-07-31T21:33:32.340 回答