Так что я играю со скрапами, пытающимися учиться, и использую MongoDB в качестве моей БД, я зашел в тупик. По сути, работа по очистке выполняется, когда элементы, которые я получаю, отображаются в журнале терминала, но я не могу получить данные для публикации sh в моей БД. MONGO_URI правильно, как я пытался в оболочке python, где я могу создавать и хранить данные ..
Вот мои файлы
items.py
import scrapy
class MaterialsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
price = scrapy.Field()
## url = scrapy.Field()
pass
spider.py
import scrapy
from scrapy.selector import Selector
from ..items import MaterialsItem
class mySpider(scrapy.Spider):
name = "<placeholder for post>"
allowed_domains = ["..."]
start_urls = [
...
]
def parse(self, response):
products = Selector(response).xpath('//div[@class="content"]')
for product in products:
item = MaterialsItem()
item['title'] = product.xpath("//a[@class='product-card__title product-card__title-v2']/text()").extract(),
item['price'] = product.xpath("//div[@class='product-card__price-value ']/text()").extract()
## product['url'] =
yield item
settings.py
MONGO_PIPELINES = {
'materials.pipelines.MongoPipeline': 300,
}
#setup mongo DB
MONGO_URI = "my MongoDB Atlas address"
MONGO_DB = "materials"
pipelines.py
import pymongo
class MongoPipeline(object):
collection_name = 'my-prices'
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
## pull in information from settings.py
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DB', ', <placeholder-spider name>')
)
def open_spider(self, spider):
## initializing spider
## opening db connection
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
## clean up when spider is closed
self.client.close()
def process_item(self, item, spider):
## how to handle each post
self.db[self.collection_name].insert(dict(item))
logging.debug("Post added to MongoDB")
return item
Любая помощь будет отличной!
* * Редактировать
структура файла
materials
spiders
my-spider
items.py
pipelines.py
settings.py