#python #scrapy
#python #scrapy
Вопрос:
Я пытаюсь создать скрипт, который будет собирать информацию с различных веб-сайтов и экспортировать ее в CSV в указанном формате. Формат.
Я смог заставить все работать, за исключением того, что это не в идеальном формате.
Прямо сейчас это одна строка на страницу, и все ссылки и текст привязки ссылки вложены в список кругов, который создает длинный список в одной ячейке в Excel.
В идеале, чего я пытаюсь достичь, это разделить списки, чтобы сделать их отдельными строками (оранжевыми на прикрепленном изображении) рядом с дублированными версиями отдельных точек данных (серыми на прикрепленном изображении).
Любая помощь будет оценена!!
«
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule, CrawlSpider
class InseevSpiderSpider(scrapy.spiders.CrawlSpider):
name = 'ExampleScraper'
allowed_domains = ['example.com']
start_urls = ['https://www.example.com/']
rules = (
Rule(LinkExtractor(allow_domains=[
'example.com']), follow=True, callback="parse_item"),
Rule(LinkExtractor(deny=('.png', ))),
)
def parse_item(self, response):
address = response.url
count_address = len(address)
content_type = response.headers['Content-Type']
status_code = response.status
title = response.xpath("//title/text()").extract()
count_title = len(title[0])
description = response.xpath(
"//meta[@name='description']/@content").extract_first()
if description:
count_description = len(description)
else:
count_description = 0
keywords = response.xpath(
"//meta[@name='keywords']/@content").extract_first()
h1 = response.xpath('//h1//text()').extract_first()
h2 = response.xpath('//h2//text()').extract_first()
robot = response.xpath(
"//meta[@name='robots']/@content").extract_first()
download_time = response.meta['download_latency']
link_anchor = response.xpath("//a/text()").extract()
link_href = response.xpath("//a/@href").extract()
yield {
'Address': address,
'Address count': count_address,
'Content Type': content_type,
'Status code': status_code,
'Title': title,
'Title count': count_title,
'Meta description': description,
'Meta description count': count_description,
'Meta keywords': keywords,
'H1': h1,
'H2': h2,
'Robot': robot,
'Download time': download_time,
"Link Anchor": link_anchor,
"Link @href": link_href
}
«
Ответ №1:
Самый простой способ — написать цикл и получить несколько элементов:
for anchor, href in zip(link_anchor, link_href):
yield {
...
"Link Anchor": anchor,
"Link @href": href
}