Первый вариант настройки в документации, второй - super(SlybotCSVItemExporter, self).init(args, *kwargs) - чемпион ГитХаба, для начала я воспроизвел второй вариант от github agrimrules/Python-Web-Crawler но воспроизвел в посте Пробовал "Scrapy feed exporter" ... а до первого варианта здесь так и не дошел... Зато в этом посте около 30 ссылок !
Оказалось, что весь сыр-бор только из-за того, чтобы упорядочить поля в сsv файле
Showing 55 available code results "ITEM_PIPELINES =" settings.py extension:py
python-scrapilicious / delicious / spiders / delicious_spider.py
RSEParser / resparser / pipelines.py
zenki2001cn/SnippetCode
ITEM_PIPELINES = 'apple.XmlExportPipelines.XmlExportPipeline',
We've found 94 code results adjust_request_args
We've found 15 code results ITEM_PIPELINES XMLFeedSpider.
kurikintoki/ero / erovideo / erobot / spiders / old / x1x_xml_feed_spider.120512.py
github agrimrules/Python-Web-Crawler
Python-Web-Crawler / example / example / feedexport.py
portia / slybot / slybot / exporter.py
catalog.njit.edu - парсим эту страничку
ITEM_PIPELINES = { FEED_EXPORTERS = {
ykalchevskiy/habra-favorites
В 2012 году основал Madrobots, который и развиваю
Feed exports
7.5 Item Exporters
CsvItemExporter
Начинаем со второго варианта, пока не попробовал, не понимал, как он рбоатет¶
Начал пробовать здесь, но в итоге перенес все отсюда в отдельный пост (ссылка в summary к этому посту)
Здесь далее описан процесс установки и фрагменты кода...
1. В проверенном пауке для тестов отключил ITEM_PIPELINES , но втавил FEED_EXPORTERS, естественно, не забыл проверить путь¶
%load C:\Users\kiss\Documents\GitMyScrapy\scrapy_xml_1\XMLFeedSpider\XMLFeedSpider\\settings.py
# Scrapy settings for XMLFeedSpider project
#
# For simplicity, this file contains only the most important settings by
# default. All the other settings are documented here:
#
# http://doc.scrapy.org/en/latest/topics/settings.html
#
BOT_NAME = 'XMLFeedSpider'
SPIDER_MODULES = ['XMLFeedSpider.spiders']
NEWSPIDER_MODULE = 'XMLFeedSpider.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'XMLFeedSpider (+http://www.yourdomain.com)'
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
'XMLFeedSpider.middleware.RotateUserAgentMiddleware' :400
}
#ITEM_PIPELINES = {
#'XMLFeedSpider.pipelines.XmlfeedspiderPipeline':300,
#'XMLFeedSpider.pipelines_filr1.ItemsFiltrsPipeline':350,
#'XMLFeedSpider.pipelines_tofile.ProxyListWriterPipeline':400
# }
FEED_EXPORTERS = {
'csv': 'XMLFeedSpider.itemexport.CSVOptionRespectingItemExporter',
}
2. Скопировал из apple/contrib/itemexport.py в папку с файлами настроек паука¶
%load C:\Users\kiss\Documents\GitMyScrapy\scrapy_xml_1\XMLFeedSpider\XMLFeedSpider\itemexport.py
"""
Created on Tue Nov 11 17:13:41 2014
@author: kiss
This is the copy of https://github.com/chappyhome/qidian/blob/0d87f422a0172b0607d59c38e276de4b77618ff3/apple/contrib/itemexport.py
"""
from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter
class CSVOptionRespectingItemExporter(CsvItemExporter):
def __init__(self, *args, **kwargs):
delimiter = settings.get('CSV_DELIMITER', ',')
kwargs['delimiter'] = delimiter
super(CSVOptionRespectingItemExporter, self).__init__(*args, **kwargs)
- Запустил из папки проекта паука с опцией записи результата в файл scrapy crawl njit -o ''.csv -t csv"
C:\Users\kiss\Documents\GitHub_2\Pythscrapy crawl njit -o ''.csv -t csv"on-Web-Crawler-master\Python-Web-Crawler-master\example>
from scrapy.contrib.exporter import CsvItemExporter
from scrapy.conf import settings
class SlybotCSVItemExporter(CsvItemExporter):
def __init__(self, *args, **kwargs):
kwargs['fields_to_export'] = settings.getlist('CSV_EXPORT_FIELDS') or None
super(SlybotCSVItemExporter, self).__init__(*args, **kwargs)
Посты чуть ниже также могут вас заинтересовать
Перечитал пост, я тогда (в ноябре) не сформулировал, какие два вида "Scrapy Feed exports"
ОтветитьУдалитьЧемпион Гитхаба - это вариант, который я попробовал вот здесь http://pythonr.blogspot.ru/2014/11/scrapy-feed-exporter-python-web-crawler.html
Путь к файлу задается из командной строки
А в документации есть два разлела (странички) -
http://doc.scrapy.org/en/latest/topics/feed-exports.html - это вспомогательная страничка, которая и сбивает с толку, если не прочиттал основную страницу.
В ней бы пример привести.
А вот здесь основная страница
http://doc.scrapy.org/en/latest/topics/exporters.html#topics-exporters
Читать надо обе вместе.
Сейчас я пока юзаю свой вариант записи полуавтоматической записи в файл,
И буду сравнивать его с "чемпионом..."
https://github.com/ajenhl/inbuds-scraper/blob/master/inbuds/spiders/inbuds_spider.py
ОтветитьУдалить# -*- coding: utf-8 -*-
Удалитьimport os.path
import urlparse
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from ..items import InbudsItem
class InbudsSpider (CrawlSpider):
name = 'INBUDS'
allowed_domains = ['bauddha.dhii.jp']
download_delay = 0.5
rules = (
Rule(LinkExtractor(allow=('search\.php\?m=trdd',)),
callback='parse_item'),
)
def parse_item (self, response):
self.log('Parsing response from %s as item' % response.url)
item = InbudsItem()
qs = urlparse.parse_qs(urlparse.urlsplit(
response.request.headers['Referer'])[3])
item['search_title'] = qs['uekey'][0]
item['url'] = response.url
for field, name in item.field_data.items():
xpath = "//td[normalize-space(preceding-sibling::td)='%s']/text()" \
% name
data = response.xpath(xpath).extract()
if data:
item[field] = '; '.join([piece.strip() for piece in data])
return item
def start_requests (self):
base_path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
titles_path = os.path.join(base_path, 'search_titles.txt')
for url in open(titles_path, 'rU').readlines():
full_url = u'http://bauddha.dhii.jp/INBUDS/search.php?m=sch&a=&uekey=%s&ekey1=&lim=2000' % url.strip().decode('utf-8')
yield self.make_requests_from_url(full_url)