2015-08-31 3 views
1

Моя идея о том, как кропотливо читать кеш firefox, искать URL-адреса изображений, где хост соответствует шаблону регулярных выражений, заключается в том, чтобы получить все содержимое файлов кеша в ~/.cache/mozilla/firefox/[]/cache2, а затем фильтровать только строки, содержащие URL-адрес изображения.Программно считывание кеша firefox

Вот пример того, что кэш-файл выглядит следующим образом:.

.2.U.2; ... V .... 57 00000380: 0000 513A 6874 7470 3a2f 2f77 7777 2e74 . .Q: http://www.t 58 00000390: 6563 686e 6970 6167 6573 2e63 6f6d 2f77 echnipages.com/w 59 000003a0: 702d 636f 6e74 656e 742f 706c 7567 696e р-содержание/плагин 60 000003b0: 732f 7961 7369 702f 696d 6167 6573 2f64 s/yasip/images/d 61 000003c0: 6566 6175 6c74 2f72 7373 5f33 3278 3332 efault/rss_32x32 62 000003d0: 2e70 6e67 006e 6563 6b6f 3a63 6c61 7373 .png.necko: класс 63 000003e0: 6966 6965 6400 3100 7265 7175 6573 742d

Поскольку эти файлы кэша, кажется, двоичные файлы, я бы тогда установить указатель/независимо к «Н» HTTP, и читать дальше, пока шестнадцатеричное значение следующей буквы равно 00, которая в таблице ascii выглядит как «\ 0».

Чтобы предотвратить дубликаты, я бы написал эти URL-адреса в файл, и каждый раз, когда будет найден новый URL-адрес, я бы сначала проверил все записи файла, чтобы узнать, существует ли URL-адрес уже.


Это простой способ, или я что-то упустил? Я не хочу использовать другие приложения/расширения для этой задачи.

Благодаря

+2

Что вы пробовали до сих пор? – Michi

+0

Открыть файл, прочитать его до тех пор, пока вы не встретите http, а затем прочитайте, пока не столкнетесь с 0. – Andrey

+0

@Michi Подумал, что вы не можете получить доступ к кешу через внешние средства. Я еще не начал программировать. – cantwakeup

ответ

1

Следующие должны делать примерно то, что вы пытаетесь достичь:

import glob, re 

cache_folder = r"~/.cache/mozilla/firefox/[]/cache2\*" 
urls = set() 

for cache_filename in glob.glob(cache_folder): 
    with open(cache_filename, 'rb') as file_cache: 
     data = file_cache.read() 
     urls |= set(re.findall("(http.*?)\x00", data)) 

for url in urls: 
    print url 

Это читает каждый из найденных файлов в папке кэша и получает список всех URL-адресов в каждой , Затем он сохраняет все эти сопоставимые URL-адреса в set, чтобы избежать дублирования. Затем он отображает установленные записи.

Вы также можете рассмотреть возможность изучения формата этих файлов.

Смежные вопросы