Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用scrapy以另一种格式获取数据_Python_Scrapy - Fatal编程技术网

Python 如何使用scrapy以另一种格式获取数据

Python 如何使用scrapy以另一种格式获取数据,python,scrapy,Python,Scrapy,我正试图从亚马逊上搜集有关笔记本电脑的数据 我的代码: class AmazonData(scrapy.Spider): name = 'amazon_laptops' allowed_domains = ['https://www.amazon.com/'] # generate link from dataframe start_urls = ['https://www.amazon.com' + str(i) for i in df.link.values

我正试图从亚马逊上搜集有关笔记本电脑的数据

我的代码:

class AmazonData(scrapy.Spider):
    name = 'amazon_laptops'
    allowed_domains = ['https://www.amazon.com/']

    # generate link from dataframe
    start_urls = ['https://www.amazon.com' + str(i) for i in df.link.values]

    def parse(self, response):
        for vals in response.xpath("//table[@id='productDetails_techSpec_section_1']"):

            yield {
            'parameters': [x.strip() for x in vals.xpath("//tr/th[@class='a-color-secondary a-size-base prodDetSectionEntry']/text()").getall()],
            'values': [x.strip() for x in vals.xpath("//tr/td[@class='a-size-base']/text()").getall()]
        }
输出如下所示:

[ {'parameters': ['resolution', 'ram', ...], 'values': ['1920x1080', '8gb', ...}]
  resolution  ram  ...
0  1920x1080  8gb  ...
1  1366x768   4gb  ...
它不可读,并且在将此输出保存到csv文件后,无法为某些数据操作获取数据帧

我不知道,如何获取数据帧如下所示:

[ {'parameters': ['resolution', 'ram', ...], 'values': ['1920x1080', '8gb', ...}]
  resolution  ram  ...
0  1920x1080  8gb  ...
1  1366x768   4gb  ...

Url示例:,

随着表格的变化,这并不简单,但这里有一种解决方法:
您可以创建一个包含您感兴趣的所有列的空数据框,然后从表中提取参数和值,将它们组合到字典中,然后将这些字典项添加到数据框中。通过使用for循环逻辑,您考虑到某些值可能不在表中,并且表中的顺序可能不同

此代码基于您提供的两个url示例:

import scrapy
作为pd进口熊猫
Amazonda类(刮毛蜘蛛):
名称='amazon_笔记本电脑'
df=pd.DataFrame(列=[‘屏幕大小’、‘屏幕分辨率’、‘最大屏幕分辨率’、‘处理器’、‘RAM’、‘硬盘驱动器’、‘图形协处理器’、‘芯片组品牌’、‘卡说明’、‘图形卡RAM大小’、‘无线类型’、‘USB 2.0端口数’、‘USB 3.0端口数’)
起始URL=['https://www.amazon.com/dp/B081945D2S', 'https://www.amazon.com/dp/B081721LTM']
def解析(自我,响应):
product=response.url.split(“/”[-1]
summary\u table=response.xpath(//table[@id='productDetails\u techSpec\u section\u 1']//tr)
keys=[x.strip()表示summary_table.xpath(“.//th/text()”).getall()中的x
values=[x.strip()代表汇总表中的x.xpath(“.//td/text()”).getall()]
表_dict=dict(zip(键、值))
对于键,表_dict.items()中的val:
如果输入列表(self.df):
self.df.loc[产品,密钥]=val
打印(self.df)

随着表格的变化,这并不简单,但这里有一种解决方法:
您可以创建一个包含您感兴趣的所有列的空数据框,然后从表中提取参数和值,将它们组合到字典中,然后将这些字典项添加到数据框中。通过使用for循环逻辑,您考虑到某些值可能不在表中,并且表中的顺序可能不同

此代码基于您提供的两个url示例:

import scrapy
作为pd进口熊猫
Amazonda类(刮毛蜘蛛):
名称='amazon_笔记本电脑'
df=pd.DataFrame(列=[‘屏幕大小’、‘屏幕分辨率’、‘最大屏幕分辨率’、‘处理器’、‘RAM’、‘硬盘驱动器’、‘图形协处理器’、‘芯片组品牌’、‘卡说明’、‘图形卡RAM大小’、‘无线类型’、‘USB 2.0端口数’、‘USB 3.0端口数’)
起始URL=['https://www.amazon.com/dp/B081945D2S', 'https://www.amazon.com/dp/B081721LTM']
def解析(自我,响应):
product=response.url.split(“/”[-1]
summary\u table=response.xpath(//table[@id='productDetails\u techSpec\u section\u 1']//tr)
keys=[x.strip()表示summary_table.xpath(“.//th/text()”).getall()中的x
values=[x.strip()代表汇总表中的x.xpath(“.//td/text()”).getall()]
表_dict=dict(zip(键、值))
对于键,表_dict.items()中的val:
如果输入列表(self.df):
self.df.loc[产品,密钥]=val
打印(self.df)

您能否提供一个您正在尝试获取的示例url?所有表中包含相关数据的表的结构是否完全相同?@carpa_jo表上的结构在不同的示例中是不同的,但所有笔记本电脑都有5或6个相同的列,如-brand、resolution等。您能否提供一个示例url,以供参考?所有表中包含相关数据的表的结构是否完全相同?@carpa_jo表的结构在不同的示例中是不同的,但所有笔记本电脑都有5或6个相同的列,如品牌、分辨率等。