我正在try 获取所有亚马逊畅销书的数据,并处理我已经使用的scrapy,我能够获得数据的整个 Select 器列表,而迭代数据列表时,结果仍然只返回单个数据项.

    def parse_page(self, response):

        product_data = response.xpath("//div[@id='gridItemRoot']") #THIS RETURNS A SELECTOR LIST

        for data in product_data:
            product_name = data.xpath("//div[@class='a-section a-spacing-mini _cDEzb_noop_3Xbw5']//img/@alt").get()
            product_rank = data.xpath("//span[@class='zg-bdg-text']/text()").get()
            
         # It only generates a single result
            yield {
                "name": product_name,
                "rank": product_rank
            }

我try 不迭代 Select 列表,而是将 Select 器直接传递给方法并产生结果,但这也返回了单个元素.

    def parse_page(self, response):
   
      
   # in previous applications all the results were scraped without iterating over any selectorlist just like following

        product_name = response.xpath("//div[@class='a-section a-spacing-mini _cDEzb_noop_3Xbw5']//img/@alt").get()
        product_rank = response.xpath("//span[@class='zg-bdg-text']/text()").get()
       
 
        yield {
            "name": product_name,
            "rank": product_rank
        }


推荐答案

您需要使用相对XPath表达式.

    def parse_page(self, response):

        product_data = response.xpath("//div[@id='gridItemRoot']") #THIS RETURNS A SELECTOR LIST

        for data in product_data:
            product_name = data.xpath(".//div[@class='a-section a-spacing-mini _cDEzb_noop_3Xbw5']//img/@alt").get()
            product_rank = data.xpath(".//span[@class='zg-bdg-text']/text()").get()
            
         # It only generates a single result
            yield {
                "name": product_name,
                "rank": product_rank
            }

XPath表达式的开头没有.,它将始终获取与根元素相关的第一个匹配项,对于每次迭代,根元素始终是相同的元素.

Python相关问答推荐

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

numba jitClass,记录类型为字符串

通过Selenium从页面获取所有H2元素

将数据框架与导入的Excel文件一起使用

按顺序合并2个词典列表

NumPy中条件嵌套for循环的向量化

部分视图的DataFrame

计算每个IP的平均值

Python列表不会在条件while循环中正确随机化'

matplotlib + python foor loop

如何防止Pandas将索引标为周期?

ConversationalRetrivalChain引发键错误

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

如何在Pandas中用迭代器求一个序列的平均值?

具有不匹配列的2D到3D广播

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?

了解如何让库认识到我具有所需的依赖项

使用元组扩展字典的产品挑战

3.我无法找到制作这种三角形图案的方法

在被零整除的情况下,Python不遵循IEEE-754吗?