Функция вывода Scrapy непосредственно на Google Drive - PullRequest
0 голосов
/ 06 мая 2019

У меня есть код scrapy, который я хочу, чтобы он выводился прямо на мой диск Google. Я нашел pydrive простым в использовании и загрузке файлов (я проверил его, и он работает)

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()

drive = GoogleDrive(gauth)

file2 = drive.CreateFile()
file2.SetContentFile('testing1.csv')
file2.Upload()

Как можноЯ использую его с scrapy runspider test1.py -o test.csv для прямой загрузки на диск?

Если он не работает, есть ли какие-либо предложения для этого?

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Вам нужно написать пользовательский конвейер или экспортер фидов .

Например, если ваш сканер маленький и результаты могут уместиться в вашей памяти, чем простой конвейеркак это будет делать:

# myproject/pipelines.py

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

class GdrivePipeline:
    data = []

    def process_item(self, item, spider):
        data.append(item)
        return item

    def close_spider(self, spider):
        gauth = GoogleAuth()
        gauth.LocalWebserverAuth()

        drive = GoogleDrive(gauth)

        file2 = drive.CreateFile()
        # write self.data to file
        file2.Upload()

Затем активируйте его в настройках:

ITEM_PIPELINES = {
    'myproject.pipelines.GdrivePipeline': 999,
} 
1 голос
/ 06 мая 2019

Это не так работает, вот как запустить scrapy spider без scrapy runspider test1.py. Вы должны создать список своих словарей, затем записать их в файл CSV, а затем использовать функцию Google для загрузки, а затем, если хотите,Вы можете удалить файл, который вы создали.

import scrapy 
from scrapy.crawler import CrawlerProcess
#Your Spider

if __name__ == "__main__":
    process = CrawlerProcess()
    process.crawl(NAME_OF_YOUR_SPIDER)
    spider = next(iter(process.crawlers)).spider
    process.start()
    #write to csv
    #upload to Google drive
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...