从本地零碎到零碎的云(刮刮集线器)-出乎意料的结果

时间:2018-07-29 08:23:07

标签: regex python-3.x scrapy scrapinghub

我在Scrapy云上部署的刮板与本地版本相比产生了意外的结果。 我的本地版本可以轻松地(从在线零售商处)提取product item的每个字段,但是在易碎的云上,字段“成分”和“价格列表”始终显示为空。 您会在图片中看到附上的两个元素,因此我总是会空着,而它工作得很好 我使用的是Python 3,堆栈配置了scrapy:1.3-py3配置。 我以为首先是正则表达式和unicode的问题,但似乎没有。 所以我尝试了所有方法:ur,ur 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

似乎这种匹配从来不会在刮y的云上发生。

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

    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)

那是同样的故事。仍然是空的。

我重复一遍:在我的本地版本上运行正常。 这两个数据是唯一一个引起问题的问题:我正在使用刮擦的云提取一堆其他数据(也使用Regex),对此我感到非常满意吗?

有什么主意吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

我真的经常与ScrapingHub一起工作,通常我的调试方式是:

  1. (通过ScrapingHub界面)检查工作请求

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

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

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

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

答案 1 :(得分:1)

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