Я удаляю некоторый текст со страницы с пауком в Python, и на выходе получается файл .csv. Все нормально, кроме порядка некоторых записей, в файле .csv он генерирует в другом порядке, что я положил в spider.py:
Вот что я получаю:
Но это тот порядок, который мне нужен и который я передаю в spider.py (строки с цветами инвертированы):
Я не знаю, почему не соблюдается порядок удаления данных. По какой-то причине он соблюдает тот же порядок, в котором данные появляются на веб-странице, но если я передаю их в другом порядке, чем веб-страница, почему паук игнорирует меня?
Мой код:
import scrapy
from scrapy.spiders import Spider
from scrapy.linkextractors import LinkExtractor
from scrapy.exceptions import CloseSpider
from verbos.items import MercadoItem
class MercadoSpider(scrapy.Spider):
name = 'verbos'
allowed_domain = ['www.pt.bab.la']
print("Ingrese un verbo:")
variable = input()
start_urls = ['https://pt.bab.la/verbo/portugues/' + variable]
def parse(self, response):
eu = response.xpath('//*[@id="conjFull"]/div[2]/div/div[2]/div[1]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[4]/div[1]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[3]/div[1]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[5]/div[1]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[6]/div[1]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[8]/div[1]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[3]/div[1]/div[2]/text() | //*[@class="content-column"]/div[6]/div[1]/div[1]/div[2]/div[1]/div[2]/text() | //*[@class="content-column"]/div[5]/div[1]/div[1]/div[2]/div[1]/div[2]/text()').extract()
voce = response.xpath('//*[@id="conjFull"]/div[2]/div/div[2]/div[3]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[4]/div[3]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[3]/div[3]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[5]/div[3]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[6]/div[3]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[8]/div[3]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[3]/div[3]/div[2]/text() | //*[@class="content-column"]/div[6]/div[1]/div[1]/div[2]/div[1]/div[2]/text() | //*[@class="content-column"]/div[5]/div[1]/div[1]/div[2]/div[1]/div[2]/text()').extract()
nos = response.xpath('//*[@id="conjFull"]/div[2]/div/div[2]/div[4]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[4]/div[4]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[3]/div[4]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[5]/div[4]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[6]/div[4]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[8]/div[4]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[2]/div[4]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[3]/div[4]/div[2]/text() | //*[@class="content-column"]/div[6]/div[1]/div[1]/div[2]/div[1]/div[2]/text() | //*[@class="content-column"]/div[5]/div[1]/div[1]/div[2]/div[1]/div[2]/text()').extract()
voces = response.xpath('//*[@id="conjFull"]/div[2]/div/div[2]/div[6]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[4]/div[6]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[3]/div[6]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[5]/div[6]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[6]/div[6]/div[2]/text() | //*[@id="conjFull"]/div[2]/div/div[8]/div[6]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[2]/div[6]/div[2]/text() | //*[@class="content-column"]/div[3]/div[1]/div[1]/div[3]/div[6]/div[2]/text() | //*[@class="content-column"]/div[6]/div[1]/div[1]/div[2]/div[1]/div[2]/text() | //*[@class="content-column"]/div[5]/div[1]/div[1]/div[2]/div[1]/div[2]/text()').extract()
for item in zip(eu, voce, nos, voces):
scraped_info = {
'eu' : item[0],
'voce' : item[1],
'nos' : item[2],
'voces' : item[3],
}
yield scraped_info
items.py:
import scrapy
class MercadoItem(scrapy.Item):
eu = scrapy.Field()
voce = scrapy.Field()
nos = scrapy.Field()
voces = scrapy.Field()
settings.py:
BOT_NAME = 'verbos'
SPIDER_MODULES = ['verbos.spiders']
NEWSPIDER_MODULE = 'verbos.spiders'
ITEM_PIPELINES = {'verbos.pipelines.MercadoPipeline': 500}
FEED_FORMAT = "csv"
FEED_URI = 'verbos_items.csv'
FEED_EXPORT_ENCODING='cp1252'
ROBOTSTXT_OBEY = False