这个问题是对我之前提出的问题的跟进。
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的错误使用引起的还是在代码的其他地方? (也许有一种更简单的方法可以实现)
感谢您的帮助!
答案 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').