【问题标题】:Compare CSV File Records with Python Scrapy Output Data将 CSV 文件记录与 Python Scrapy 输出数据进行比较
【发布时间】:2019-05-28 23:21:57
【问题描述】:

我是 Python 和网络抓取的新手。请原谅我的无知。在这个程序中,我抓取了一些 url 并将产品名称和价格保存到 csv 文件。当我再次运行脚本时,我想读取现有的 csv 记录(产品名称和价格),如果任何产品的价格发生变化,我想打印一条消息。我正在努力实现程序的第二部分,即将值与保存的 csv 记录进行比较。请帮忙。任何帮助将不胜感激。

import scrapy
from time import sleep
import csv, os, json
import random
import os

class spider1(scrapy.Spider):
    name = "spider1"

    with open("data.csv", "a") as filee:

        if os.stat("data.csv").st_size != 0:
            filee.truncate(0)
        filee.close()

    def start_requests(self):
        list = ["https://www.example.com/item1",
                "https://www.example.com/item2",
                "https://www.example.com/item3",
                "https://www.example.com/item4",
                "https://www.example.com/item5"
                ]

        for i in list:
            yield scrapy.Request(i, callback=self.parse)
            sleep(random.randint(0, 5))

    def parse(self, response):

        product_name = response.css('#pd-h1-cartridge::text')[0].extract()
        product_price = response.css(
            '.product-price .is-current, .product-price_total .is-current, .product-price_total ins, .product-price ins').css(
            '::text')[3].extract()


        with open('data.csv', 'a+') as file:

            itemwriter = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

            itemwriter.writerow([str(product_name).strip(), str(product_price).strip()])

            file.close()

CSV 输出

Purple Wine Glass Cooler,1.47
Color Your Own VBS Island Wind Chimes,6.47
Color Your Own Fuzzy Patriotic Wreaths,7.79
Color Your Own Patriotic Keychains,6.19
Patriotic Cool Treats Craft Stick Magnet Craft Kit,6.19 

【问题讨论】:

  • 我会做两个单独的程序/脚本 - 首先将数据抓取到新的 csv 中,然后比较两个 csv 文件中的值。
  • 如果您执行filee.truncate(0),那么您会丢失以前的数据,然后您无法将它们与新值进行比较。
  • scrapy 内置了写入 csv 的函数。您可以使用选项-o data.csv-t csv -o data.csv 运行它。
  • 不,您不必爬 2 次。您必须在开始时抓取一次以获取第一个数据,然后(在 cron 中)您必须每天抓取一次以获取与以前数据进行比较的新数据。第二个脚本仅用于比较磁盘上的两个 csv 文件中的数据,而不是抓取新数据。
  • 如果您想在一个脚本中执行此操作,那么您必须在使用 truncate() 之前从 data.csv 读取值,然后您可以将它们与您在 parse() 中获得的新值进行比较

标签: python csv web-scraping scrapy web-crawler


【解决方案1】:

仅使用 Scrapy 生成 CSV 文件。

编写一个单独的脚本来比较 CSV 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2017-07-14
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多