Запускайте scrapy как обычные файлы python

#python #scrapy

#python #scrapy

Вопрос:

После долгих поисков в этой теме о том, как запустить файл scrapy python как обычные файлы python, я попробовал прокомментировать строки

 import scrapy
#from scrapy.crawler import CrawlerProcess

class HamburgSpider(scrapy.Spider):
    name = 'hamburg'
    #allowed_domains = ['https://www.hamburg.de']
    start_urls = ['https://www.hamburg.de/branchenbuch/hamburg/10239785/n0/']
    custom_settings = {
        'FEED_EXPORT_ENCODING': 'utf-8-sig'
    }

    def parse(self, response):
        items = response.xpath("//div[starts-with(@class, 'item')]")
        for item in items:
            business_name = item.xpath(".//h3[@class='h3rb']/text()").get()
            address1 = item.xpath(".//div[@class='address']/p[@class='extra post']/text()[1]").get()
            address2 = item.xpath(".//div[@class='address']/p[@class='extra post']/text()[2]").get()
            phone = item.xpath(".//div[@class='address']/span[@class='extra phone']/text()").get()

            yield {
                'Business Name': business_name,
                'Address1': address1,
                'Address2': address2,
                'Phone Number': phone
            }

#process = CrawlerProcess()
#process.crawl(HamburgSpider)
#process.start()
  

Без строк с комментариями я обычно запускаю код, используя эту строку

 scrapy runspider HamburgSpider.py -o output.csv
  

Теперь у меня есть такой код

 import scrapy
from scrapy.crawler import CrawlerProcess

class HamburgSpider(scrapy.Spider):
    name = 'hamburg'
    #allowed_domains = ['https://www.hamburg.de']
    start_urls = ['https://www.hamburg.de/branchenbuch/hamburg/10239785/n0/']
    custom_settings = {
        'FEED_EXPORT_ENCODING': 'utf-8-sig'
    }

    def parse(self, response):
        items = response.xpath("//div[starts-with(@class, 'item')]")
        for item in items:
            business_name = item.xpath(".//h3[@class='h3rb']/text()").get()
            address1 = item.xpath(".//div[@class='address']/p[@class='extra post']/text()[1]").get()
            address2 = item.xpath(".//div[@class='address']/p[@class='extra post']/text()[2]").get()
            phone = item.xpath(".//div[@class='address']/span[@class='extra phone']/text()").get()

            yield {
                'Business Name': business_name,
                'Address1': address1,
                'Address2': address2,
                'Phone Number': phone
            }

process = CrawlerProcess()
process.crawl(HamburgSpider)
process.start()
  

Затем запустите код с помощью python HamburgSpider.py . Код хорошо выполняется в powershell. Но я не знаю, как экспортировать в csv в этом случае.

Ответ №1:

CrawlerProcess принимает объект настроек в качестве параметра.

Начиная с scrapy 2.1, все параметры экспорта фида можно задать с помощью FEEDS параметра.
Чтобы получить желаемый результат, следует использовать что-то вроде этого:

 process = CrawlerProcess({
    'FEEDS': {
        'output.csv': {
            'format': 'csv',
            'encoding': 'utf-8-sig',
        }
    }
})
  

Другим вариантом является установка этого custom_settings параметра, но я предпочитаю использовать глобальные параметры в большинстве случаев, когда это возможно (это также делает FEED_EXPORT_ENCODING настройку ненужной).