Python Scrapy:如何在spider中使用项目以及如何将项目发送到管道?

Python Scrapy:如何在spider中使用项目以及如何将项目发送到管道?,python,scrapy,scrapy-spider,scrapy-pipeline,Python,Scrapy,Scrapy Spider,Scrapy Pipeline,我是新来的scrapy,我的任务很简单: 对于给定的电子商务网站: 抓取所有网站页面 查找产品页面 如果URL指向产品页面 创建一个项目 处理项目以将其存储在数据库中 我创建了spider,但产品只是打印在一个简单的文件中 我的问题是关于项目结构的:如何在spider中使用项以及如何将项发送到管道 我找不到使用项目和管道的简单项目示例。 如何使用我的蜘蛛中的物品 嗯,items的主要用途是存储您爬网的数据剪贴。项目基本上是字典。要声明项目,您必须创建一个类并在其中添加scrapy.Fiel

我是新来的
scrapy
,我的任务很简单:

对于给定的电子商务网站:

  • 抓取所有网站页面

  • 查找产品页面

  • 如果URL指向产品页面

  • 创建一个项目

  • 处理项目以将其存储在数据库中

我创建了spider,但产品只是打印在一个简单的文件中

我的问题是关于项目结构的:如何在spider中使用项以及如何将项发送到管道

我找不到使用项目和管道的简单项目示例。

  • 如何使用我的蜘蛛中的物品
嗯,items的主要用途是存储您爬网的数据<代码>剪贴。项目基本上是字典。要声明项目,您必须创建一个类并在其中添加
scrapy.Field

import scrapy

class Product(scrapy.Item):
    url = scrapy.Field()
    title = scrapy.Field()
现在,您可以通过导入产品在spider中使用它

关于高级信息,我让你检查一下文件

  • 如何将项目发送到管道
首先,您需要告诉spider使用您的
定制管道

设置.py文件中:

ITEM_PIPELINES = {
    'myproject.pipelines.CustomPipeline': 300,
}
from scrapy.exceptions import DropItem

class CustomPipeline(object):
    def __init__(self):
        # Create your database connection

    def process_item(self, item, spider):
        # Here you can index your item
        return item
您现在可以编写管道并使用项目

pipeline.py文件中:

ITEM_PIPELINES = {
    'myproject.pipelines.CustomPipeline': 300,
}
from scrapy.exceptions import DropItem

class CustomPipeline(object):
    def __init__(self):
        # Create your database connection

    def process_item(self, item, spider):
        # Here you can index your item
        return item
最后,在您的spider中,您需要
在物品填满后生成

spider.py示例:

import scrapy
from myspider.items import Product

class MySpider(scrapy.Spider):
    name = "test"
    start_urls = ['http://www.exemple.com']

    def parse(self, response):
        doc = Product()
        doc['url'] = response.url
        doc['title'] = response.xpath('//div/p/text()')
        yield doc # Will go to your pipeline

希望这能有所帮助,这是管道的文档:

你在这里到底放了什么<代码>#这里您可以插入您的项目
在示例中,管道用于将您爬网到的数据插入数据库。在
process\u item
函数中,您将使用数据库api为数据库中的已爬网数据编制索引。因此,我在这里的确切位置取决于我使用的数据库。感谢您的澄清,您介意插入一个示例吗?实际上是
def\uuu init(self)
,而不是
def\uuu init(self)
?!?!