Javascript 使用Scrapy Xpath从脚本标记获取数据,并将其用作CSV

Javascript 使用Scrapy Xpath从脚本标记获取数据,并将其用作CSV,javascript,python,web-scraping,scrapy,Javascript,Python,Web Scraping,Scrapy,我一直在尝试使用Scrapy(xpath)从脚本标记中提取数据。我的主要问题是识别正确的div和script标记。我不熟悉使用xpath,非常感谢您的帮助 <script> var COUNTRY_SHOP_STATUS = "buy"; var COUNTRY_SHOP_URL = ""; try { digitalData.page.pathIndicator.depth_2 = "mobile"; digitalData.page.pathIndicator.depth

我一直在尝试使用Scrapy(xpath)从脚本标记中提取数据。我的主要问题是识别正确的div和script标记。我不熟悉使用xpath,非常感谢您的帮助

<script>    
var COUNTRY_SHOP_STATUS = "buy";
var COUNTRY_SHOP_URL = "";
try {
digitalData.page.pathIndicator.depth_2 = "mobile";
digitalData.page.pathIndicator.depth_3 = "mobile";
digitalData.page.pathIndicator.depth_4 = "smartphones";
digitalData.page.pathIndicator.depth_5 = "galaxy-s8";    
digitalData.product.pvi_type_name = "Mobile";
digitalData.product.pvi_subtype_name = "Smartphone";
digitalData.product.model_name = "SM-G950F";
digitalData.product.category = digitalData.page.pathIndicator.depth_3;
} catch(e) {}
</script>

var COUNTRY\u SHOP\u STATUS=“购买”;
var COUNTRY_SHOP_URL=“”;
试一试{
digitalData.page.pathIndicator.depth_2=“移动”;
digitalData.page.pathIndicator.depth_3=“移动”;
digitalData.page.pathIndicator.depth_4=“智能手机”;
digitalData.page.pathIndicator.depth_5=“galaxy-s8”;
digitalData.product.pvi_type_name=“Mobile”;
digitalData.product.pvi_子类型_name=“智能手机”;
digitalData.product.model_name=“SM-G950F”;
digitalData.product.category=digitalData.page.pathIndicator.depth_3;
}捕获(e){}

最后,我想用model.name和depth 3、4和5的数据填充我的csv文件。我尝试过与此问题类似的其他解决方案,但它们似乎不起作用…

您可以使用
regex
提取所需的值:

import re

source = response.xpath("//script[contains(., 'COUNTRY_SHOP_STATUS')]/text()").extract()[0]

def get_values(parameter, script):
    return re.findall('%s = "(.*)"' % parameter, script)[0]

print(get_values("pathIndicator.depth_5", source))
print(get_values("pvi_subtype_name", source))
print(get_values("model_name", source))
...

您可以使用
regex
提取所需的值:

import re

source = response.xpath("//script[contains(., 'COUNTRY_SHOP_STATUS')]/text()").extract()[0]

def get_values(parameter, script):
    return re.findall('%s = "(.*)"' % parameter, script)[0]

print(get_values("pathIndicator.depth_5", source))
print(get_values("pvi_subtype_name", source))
print(get_values("model_name", source))
...

你能提供一份你试图从中提取信息的数据样本吗?“我尝试过其他解决方案…”确切地说是哪种解决方案?共享当前和所需的output@Ggg谢谢你的回答!因此,我尝试访问的url为:。这只适用于Galaxy S8,但我也需要访问其他星系。Galaxy S9,Note 9等。我想从该脚本标记中检索以下数据:我想从digitalData.product.pvi_subtype_name=“Smartphone”等变量中获取诸如“Smartphone”、“Galaxy-S9”、“mobile”等值;或digitalData.page.pathIndicator.depth_5=“galaxy-s8”;我想将这些值存储在一个CSV文件中。@Andersson也感谢您的回答!我已经看了以下主题和内容。我已经编辑了那里提供的解决方案,但它们对我不起作用。你能提供一份你试图从中提取信息的数据样本吗?“我尝试过其他解决方案…”确切地说是哪种解决方案?共享当前和所需的output@Ggg谢谢你的回答!因此,我尝试访问的url为:。这只适用于Galaxy S8,但我也需要访问其他星系。Galaxy S9,Note 9等。我想从该脚本标记中检索以下数据:我想从digitalData.product.pvi_subtype_name=“Smartphone”等变量中获取诸如“Smartphone”、“Galaxy-S9”、“mobile”等值;或digitalData.page.pathIndicator.depth_5=“galaxy-s8”;我想将这些值存储在一个CSV文件中。@Andersson也感谢您的回答!我已经看了以下主题和内容。我已经编辑了这里提供的解决方案,但它们对我不起作用。谢谢@Anderson!它就像一个符咒!谢谢!!如何将这些“打印”功能打印的值直接从终端存储在CSV中?祝你有美好的一天!您可以保存所需的值。如果它解决了你的问题,别忘了告诉你@Anderson!它就像一个符咒!谢谢!!如何将这些“打印”功能打印的值直接从终端存储在CSV中?祝你有美好的一天!您可以保存所需的值。如果它解决了你的问题,别忘了