Как открыть большой CSV со списком URL-адресов и пролистать их? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть большой CSV, который находится на моем локальном компьютере, который содержит только список URL-адресов, без других столбцов, которые я хочу сканировать и извлечь определенный элемент css из каждого из этих URL-адресов. Я завершил тестирование этого, выполнив выборку из единственного начального URL, не глядя на CSV. Я не могу понять, как открыть большой CSV с миллионом URL-адресов, чтобы через каждую из них было скопировано go, а затем очищено, а затем go до следующего.

import scrapy
from ..items import stkscrapeItem

class stkSpider(scrapy.Spider):
name = 'stkscrape'
start_urls = [
    'https://www.exampleurl.com'
]

def parse(self, response):

    items = stkscrapeItem()

    contriburl = response.css(".b_q_e a::attr(href)").extract()

    items['contriburl'] = contriburl
    yield items

1 Ответ

0 голосов
/ 30 апреля 2020

Я только что набрал это прямо здесь, поэтому может иметь опечатки.

Но должно быть довольно близко к тому, что вы ожидаете

Просто чтобы сделать это лучше, вы можете разделить миллионы CSV файл в куски, используя pandas:

create_files.py

import pandas as pd
counter = 0
for df in pd.read_csv("your_file_with_urls.csv", chunksize=100000):
    df.to_csv(f"input_{counter}.csv", index=False)
    counter += 1

Это создает несколько файлов в том же месте.

Теперь в том же месте, что и scrapy.cfg файл создать файл main.py со следующим:

main.py

from glob import glob
from scrapy import cmdline


for each_file in glob("input_*.csv"):
    cmdline.execute("scrapy crawl your_spider".split() + ["-a", each_file])

Таким образом, мы отправляем имя каждого небольшого файла конструктору паука ( init .py функция)

В вашем your_spider получите аргумент each_file следующим образом:

your_spider.py

def YourSpiderName(scrapy.Spider):

    def __init__(self, each_file='', **kwargs):
        self.start_urls =  set(pd.read_csv("path_to/each_file")["URL_COLUMN"].tolist())
        super().__init__(**kwargs)  # python3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...