Вы можете легко опустить селен и scrapy.Selector и просто использовать ответ в методе разбора.
import scrapy
class FlipkartSpider(scrapy.Spider):
name = 'flipkarttrial1'
allowed_domains = ['flipkart.com']
def start_requests(self):
url = 'https://www.flipkart.com/womens-footwear/heels/pr?sid=osp,iko,6q1&otracker=nmenu_sub_Women_0_Heels'
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
prices = response.xpath('//div/div[@class="_1vC4OE"]/text()').extract()
for price in prices:
yield {'price':price}
Затем запустите его, используя scrapy crawl flipkarttrial1 -o data.csv -t csv
Отредактировано: Если вы все еще хотитеSelenium, вы можете использовать модуль csv python для записи файла csv.
Метод start_request
должен возвращать объект scrapy.Request(url, callback)
, затем метод обратного вызова (в приведенном ниже коде метод parse
являетсяобратный вызов) выполняет всю остальную работу.
class FlipkartSpider(Spider):
name = 'flipkarttrial1'
allowed_domains = ['flipkart.com']
start_urls = ['https://www.flipkart.com/womens-footwear/heels/pr?sid=osp,iko,6q1&otracker=nmenu_sub_Women_0_Heels']
def parse(self, response):
self.driver = webdriver.Chrome('C:\xyz\chromedriver')
self.driver.get(response.url)
sel = Selector(text=self.driver.page_source)
prices = sel.xpath('//div/div[@class="_1vC4OE"]/text()').extract()
output = open('output_data.csv', 'w')
fieldnames = ['price']
csv_file = csv.DictWriter(output, fieldnames)
for price in prices:
yield csv_file.writerow({fieldnames[0]: price})