从多个URL读取代码,然后在最终的csv中写入结果

时间:2018-08-28 19:34:49

标签: python regex scrapy

我需要使用Regex从多个URL的脚本标签中提取数据。我设法实现了完成一半工作的代码。我有一个csv文件('links.csv '),其中包含我需要抓取的所有网址。我设法读取了csv,并将所有网址存储在名为'start_urls'的变量中。我的问题是我需要一种方法来一次从'start_urls'中读取url并执行代码的下一部分。 在终端中执行代码时,我会收到2个错误:

1.ERROR:获取启动请求时出错 2. TypeError:请求网址必须为str或unicode,获取列表

如何修复我的代码?我是Scrapy的初学者,但我确实需要此脚本才能正常工作……谢谢您!

以下是我存储在初始csv('links.csv')中的url的一些示例:

"https://www.samsung.com/uk/smartphones/galaxy-note8/"
"https://www.samsung.com/uk/smartphones/galaxy-s8/"
"https://www.samsung.com/uk/smartphones/galaxy-s9/"

这是我的代码:

import scrapy
import csv
import re

class QuotesSpider(scrapy.Spider):
    name = "quotes"

    def start_requests(self):
        with open('links.csv','r') as csvf:
            for url in csvf:
                yield scrapy.Request(url.strip())

    def parse(self, response):
        source = response.xpath("//script[contains(., 'COUNTRY_SHOP_STATUS')]/text()").extract()[0]
        def get_values(parameter, script):
            return re.findall('%s = "(.*)"' % parameter, script)[0]

        with open('baza.csv', 'w') as csvfile:
            fieldnames = ['Category', 'Type', 'SK']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            writer.writeheader()
            for pvi_subtype_name,pathIndicator.depth_5,model_name in zip(source):
                writer.writerow({'Category': get_values("pvi_subtype_name", source), 'Type': get_values("pathIndicator.depth_5", source), 'SK': get_values("model_name", source)})

1 个答案:

答案 0 :(得分:0)

将以下方法添加到蜘蛛:

def start_requests(self):
    with open('links.csv','r') as csvf:
        for url in csvf:
            yield scrapy.Request(url.strip())

并从代码中删除先前的with...块。