抓取网页时出现无法散列的类型列表问题

时间:2019-01-07 14:54:47

标签: python json regex web-scraping scrapy

这个问题是对我之前提出的问题的跟进。

Scraping data from a http & javaScript site

出现了新的错误,因此,我现在停留在这些错误上。

代码与上一个问题相同,类似

cothesAmz_item = ClothesItem()
    #info de producto
    script = response.xpath('//script/text()').extract()
    data = re.findall(script, '(\{.+?\}_')

    d = json.loads(data[0])

    cothesAmz_item['nombreProducto'] = response.xpath('normalize-space(//span[contains(@id, "productTitle")]/text())').extract()

    yield cothesAmz_item    

我已经尝试打印脚本并且可以正常工作,虽然文本量很大,但是可以打印出一些东西。

我现在遇到的问题是正则表达式之一。代码到达时

data = re.findall(script, '(\{.+?\}_')

哪些内容应该放在方括号之间的所有“数据”中,但出现不可散列的“列表”错误。

有了这个,我想经过

d = json.loads(data[0])

获取一种字典,在其中我可以从页面中提取数据

此错误是由于对re.findall的错误使用引起的还是在代码的其他地方? (也许有一种更简单的方法可以实现)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

re.findall函数将arguments都设为string,但是

script = response.xpath('//script/text()').extract()

返回列表。

如果脚本列表使用多个元素:

script = ' '.joins(script)    #convert list to string

如果它是列表中的单个元素,则:

data = re.finall(script[0], 'your regex').