Имея следующего паука:
import scrapy
class ScrapeNames(scrapy.Spider):
name='final2'
start_urls = [
'https://www.trekearth.com/members/'
]
def parse(self, response):
for entry in response.xpath('//table[@class="member-table"]'):
for name in entry.xpath('.//tr[@class="row"]/td/p/a/text()|.//tr/td/p/a/text()').extract():
item['name'] = name
for photo in entry.xpath('.//tr[@class="row"]/td[6]/a/text()|.//tr[@class="row"]/td[6]/text()|.//tr/td[6]/text()|.//tr/td[6]/a/text()').extract():
item['photo'] = photo
yield item
Я хочу извлечь количество фотографий, сделанных пользователем, а затем экспортировать их в CSV.Однако в моем .csv
у меня есть только последний элемент в таблице на этой странице (см. Скриншот ниже).
Очевидно, что я хочуиметь имя участника и количество фотографий, сделанных для всех пользователей на странице.Что я делаю неправильно?Как это исправить?
РЕДАКТИРОВАТЬ: Возможно, это также важно, но мой файл items.py
выглядит следующим образом:
import scrapy
class FinalItem(scrapy.Item):
name = scrapy.Field()
photo = scrapy.Field()
pass
СЛЕДОВАТЬ ЗА ВОПРОСОМ:
Я ввел некоторые улучшения в мой код, который теперь:
class ScrapeMovies(scrapy.Spider):
name='final2'
start_urls = [
'https://www.trekearth.com/members/'
]
def parse(self, response):
item = FinalItem()
for entry in response.xpath('//table[@class="member-table"]'):
for name in entry.xpath('.//tr[@class="row"]/td/p/a/text()|.//tr/td/p/a/text()').extract():
names = entry.xpath('.//tr[@class="row"]/td/p/a/text()|.//tr/td/p/a/text()').extract()
item['name'] = ";".join(names)
for photos in entry.xpath('.//tr[@class="row"]/td[6]/a/text()|.//tr[@class="row"]/td[6]/text()|.//tr/td[6]/text()|.//tr/td[6]/a/text()').extract():
photos = entry.xpath('.//tr[@class="row"]/td[6]/a/text()|.//tr[@class="row"]/td[6]/text()|.//tr/td[6]/text()|.//tr/td[6]/a/text()').extract()
item['photo'] = ";".join(photos)
yield item
Однако в конечном итоге это создало беспорядок в .csv
, который теперь выглядит следующим образом:
Есть ли простой способ исправить это?
Пример желаемого результата в .csv ниже:
РЕДАКТИРОВАТЬ2:
Мой паук сейчас:
import scrapy
from final.items import FinalItem
class ScrapeMovies(scrapy.Spider):
name='final2'
start_urls = [
'https://www.trekearth.com/members/'
]
def parse(self, response):
for row in response.xpath('//table[@class="member-table"]//tr[position() > 1]'):
item = FinalItem()
item['name'] = row.xpath('./td[2]//a/text()').extract_first()
item['photos'] = row.xpath('string(./td[6])').extract_first()
yield item
Все еще не дает должного результата.У меня есть только пустой .csv.Обновлены settings.py