2017-01-05 2 views
2

У меня есть файл размером 10 ГБ. Этот файл содержит в основном URL. Я пытаюсь получить код статуса HTTP каждого URL-адреса и хранить их в другом файле с расширением .CSV.
Я искал код и нашел решение для доступа код статуса URL с помощью Python:Как узнать статус HTTP быстрее?

import requests 
request = requests.get('http://www.example.com') 
print(request.status_code) 

Но он принимает на одном URL. У меня есть файл большего размера. Я не знаю, как я могу вводить URL-адреса из файла в эту команду. Даже как сохранить выход в формате .CSV
Даже не быстрее. Я ищу более быстрое решение, которое даст мне более быстрый результат для файла размером 10 ГБ.
Я попробовал команду Ubuntu также:

xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out '%{url_effective},%{http_code}\n' <Input_File.txt> output.CSV 

Но это также не поддерживает многопоточность. Он принимает одну строку за раз, а затем сохраняет до CSV.
Итак, мой вопрос заключается в том, как я могу сделать эту работу быстрее для размера файла 10 ГБ. Если на любом языке программирования есть какое-либо решение, я буду счастлив реализовать.
Вот пример файла из URL - небольшой кусок от моего 10 Гб файла:
https://drive.google.com/file/d/0BzQ6rtO2VN95c0YzclhySVZYNDQ/view?usp=sharing
Я хочу сохранить выходные данные в CSV, как:

URL, HTTP код статуса

Например:

http://google.com,200 
http://example.com,503 

Надеется, что это поможет понять мой запрос.

+0

Если ваша машина достаточно мощная, попробуйте выполнить многопроцессорную обработку на Python. Установите общедоступную очередь URL-адресов, а затем установите N процессов, получающих URL-адреса из общедоступной очереди. – Acepcs

+0

@Acepcs Спасибо за советы. Тем не менее размер моего друга составляет 10 ГБ. или даже больше в течение некоторого времени. Сколько процессов и сколько разделов вы думаете, что я должен делать. Я ищу все в одном решении для выполнения любого размера файла быстрее. Я не хочу, чтобы программа занимала несколько дней, чтобы выполнить эту работу. несколько часов - это то, что я хочу. –

+0

[Это может указать некоторые указатели] (https://stackoverflow.com/questions/6441509/how-to-write-a-process-pool-bash-shell), если вы не хотите использовать Python. –

ответ

1

Что может сделать curl, запросы python могут часто делать и делать лучше. как curl, он также имеет метод HEAD.

import requests 
response = requests.head('http://www.example.com') 
print(response.status_code) 
+0

Да, вы правы, но дело в том, что я не знаю, как передавать несколько URL-адресов во время обработки и выдавать выходные данные команде Python или Curl в ubuntu. Я пробовал много вещей, но имею ту же проблему. Один URl за один раз. Я хочу передать несколько URL-адресов, скажем, 100 за раз. Размер моего файла - 10 ГБ .... –

+0

с использованием нескольких URL-адресов будет быстрее, только если они находятся на одном сервере. Другими словами, накладные расходы на установление соединения все равно будут. И вы после обработки всех своих 10GB, вероятно, сэкономите около 30 секунд. – e4c5

+0

У меня есть куча URL-адресов, и вам просто нужно проверить, живы они или нет. Они не находятся на одном сервере. Они также находятся в разных местах. –