#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
настройку ненужной).