2020-05-07 15:28:01 +02:00
waybackpy
=========
2020-08-09 07:35:04 +02:00
|contributions welcome| |Build Status| |codecov| |Downloads| |Release|
|Codacy Badge| |Maintainability| |CodeFactor| |made-with-python| |pypi|
|PyPI - Python Version| |Maintenance| |Repo size| |License: MIT|
2020-07-18 13:19:03 +02:00
2020-10-02 21:52:51 +02:00
.. figure :: https://raw.githubusercontent.com/akamhy/waybackpy/master/assets/waybackpy-colored%20284.png
:alt: Wayback Machine
2020-07-18 13:19:03 +02:00
2020-10-02 21:52:51 +02:00
Wayback Machine
Waybackpy is a Python library that interfaces with `Internet
2020-07-19 17:34:32 +02:00
Archive <https://en.wikipedia.org/wiki/Internet_Archive>`__'s ` Wayback
Machine <https://en.wikipedia.org/wiki/Wayback_Machine>`__ API. Archive
2020-10-02 21:52:51 +02:00
webpages and retrieve archived webpages easily.
2020-07-18 13:20:37 +02:00
Table of contents
=================
.. raw :: html
<!--ts-->
2020-07-19 17:34:32 +02:00
- `Installation <#installation> `__
2020-07-18 13:20:37 +02:00
2020-07-19 17:34:32 +02:00
- `Usage <#usage> `__
2020-08-09 07:35:04 +02:00
- `As a Python package <#as-a-python-package> `__
2020-07-22 18:05:02 +02:00
2020-10-02 21:52:51 +02:00
- `Saving an url <#capturing-aka-saving-an-url-using-save> `__
- `Retrieving the oldest
archive <#retrieving-the-oldest-archive-for-an-url-using-oldest>`__
- `Retrieving the recent most/newest
archive <#retrieving-the-newest-archive-for-an-url-using-newest>`__
- `Retrieving archive close to a specified year, month, day, hour,
and
minute <#retrieving-archive-close-to-a-specified-year-month-day-hour-and-minute-using-near>`__
- `Get the content of
webpage <#get-the-content-of-webpage-using-get>`__
- `Count total archives for an
URL <#count-total-archives-for-an-url-using-total_archives>`__
- `List of URLs that Wayback Machine knows and has archived for a
domain
2020-10-02 22:03:15 +02:00
name <#list-of-urls-that-wayback-machine-knows-and-has-archived-for-a-domain-name>`__
2020-10-02 21:52:51 +02:00
2020-10-02 22:03:15 +02:00
- `With the Command-line
interface <#with-the-command-line-interface>`__
2020-07-22 18:05:02 +02:00
- `Save <#save> `__
- `Oldest archive <#oldest-archive> `__
- `Newest archive <#newest-archive> `__
- `Total archives <#total-number-of-archives> `__
2020-10-02 22:03:15 +02:00
- `Archive near specified time <#archive-near-time> `__
2020-07-22 18:05:02 +02:00
- `Get the source code <#get-the-source-code> `__
2020-10-02 21:52:51 +02:00
- `Fetch all the URLs that the Wayback Machine knows for a
domain <#fetch-all-the-urls-that-the-wayback-machine-knows-for-a-domain>`__
2020-07-18 13:20:37 +02:00
2020-07-19 17:34:32 +02:00
- `Tests <#tests> `__
2020-07-18 13:20:37 +02:00
2020-07-19 17:34:32 +02:00
- `Dependency <#dependency> `__
2020-07-18 13:20:37 +02:00
2020-10-02 21:52:51 +02:00
- `Packaging <#packaging> `__
2020-07-19 17:34:32 +02:00
- `License <#license> `__
2020-07-18 13:20:37 +02:00
.. raw :: html
<!--te-->
2020-07-18 13:21:47 +02:00
Installation
------------
2020-07-19 17:34:32 +02:00
Using `pip <https://en.wikipedia.org/wiki/Pip_(package_manager)> `__ :
2020-07-18 13:21:47 +02:00
.. code :: bash
2020-07-19 17:34:32 +02:00
pip install waybackpy
2020-07-18 13:21:47 +02:00
2020-07-22 18:05:02 +02:00
or direct from this repository using git.
.. code :: bash
pip install git+https://github.com/akamhy/waybackpy.git
2020-07-18 13:21:47 +02:00
Usage
-----
2020-08-09 07:35:04 +02:00
As a Python package
2020-07-22 18:05:02 +02:00
~~~~~~~~~~~~~~~~~~~
2020-07-19 17:34:32 +02:00
Capturing aka Saving an url using save()
2020-07-18 13:21:47 +02:00
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code :: python
2020-07-19 17:34:32 +02:00
import waybackpy
new_archive_url = waybackpy.Url(
2020-07-18 13:21:47 +02:00
2020-07-19 17:34:32 +02:00
url = "https://en.wikipedia.org/wiki/Multivariable_calculus",
user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0"
2020-10-02 21:52:51 +02:00
2020-07-19 17:34:32 +02:00
).save()
print(new_archive_url)
.. code :: bash
2020-07-18 13:21:47 +02:00
2020-07-19 17:34:32 +02:00
https://web.archive.org/web/20200504141153/https://github.com/akamhy/waybackpy
2020-07-18 13:21:47 +02:00
2020-07-19 17:34:32 +02:00
Try this out in your browser @
2020-07-20 06:37:31 +02:00
https://repl.it/@akamhy/WaybackPySaveExample\
2020-07-18 13:22:37 +02:00
2020-10-02 21:52:51 +02:00
Retrieving the oldest archive for an URL using oldest()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2020-07-18 13:22:37 +02:00
.. code :: python
2020-07-19 17:34:32 +02:00
import waybackpy
2020-07-18 13:22:37 +02:00
2020-07-19 17:34:32 +02:00
oldest_archive_url = waybackpy.Url(
2020-07-18 13:22:37 +02:00
2020-07-19 17:34:32 +02:00
"https://www.google.com/",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:40.0) Gecko/20100101 Firefox/40.0"
).oldest()
print(oldest_archive_url)
.. code :: bash
http://web.archive.org/web/19981111184551/http://google.com:80/
Try this out in your browser @
2020-07-20 06:37:31 +02:00
https://repl.it/@akamhy/WaybackPyOldestExample\
2020-07-18 13:22:37 +02:00
2020-10-02 21:52:51 +02:00
Retrieving the newest archive for an URL using newest()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2020-07-18 13:22:37 +02:00
.. code :: python
2020-07-19 17:34:32 +02:00
import waybackpy
newest_archive_url = waybackpy.Url(
"https://www.facebook.com/",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0"
2020-10-02 21:52:51 +02:00
2020-07-19 17:34:32 +02:00
).newest()
2020-07-18 13:22:37 +02:00
2020-07-19 17:34:32 +02:00
print(newest_archive_url)
2020-07-18 13:22:37 +02:00
2020-07-19 17:34:32 +02:00
.. code :: bash
https://web.archive.org/web/20200714013225/https://www.facebook.com/
Try this out in your browser @
2020-07-20 06:37:31 +02:00
https://repl.it/@akamhy/WaybackPyNewestExample\
2020-07-18 13:23:27 +02:00
2020-10-02 21:52:51 +02:00
Retrieving archive close to a specified year, month, day, hour, and minute using near()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2020-07-18 13:23:27 +02:00
.. code :: python
2020-07-19 17:34:32 +02:00
from waybackpy import Url
user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0"
github_url = "https://github.com/"
github_wayback_obj = Url(github_url, user_agent)
# Do not pad (don't use zeros in the month, year, day, minute, and hour arguments). e.g. For January, set month = 1 and not month = 01.
.. code :: python
github_archive_near_2010 = github_wayback_obj.near(year=2010)
print(github_archive_near_2010)
2020-07-18 13:23:27 +02:00
2020-07-19 17:34:32 +02:00
.. code :: bash
2020-07-18 13:23:27 +02:00
2020-07-19 17:34:32 +02:00
https://web.archive.org/web/20100719134402/http://github.com/
2020-07-18 13:23:27 +02:00
2020-07-19 17:34:32 +02:00
.. code :: python
github_archive_near_2011_may = github_wayback_obj.near(year=2011, month=5)
print(github_archive_near_2011_may)
2020-07-18 13:23:27 +02:00
2020-07-19 17:34:32 +02:00
.. code :: bash
https://web.archive.org/web/20110519185447/https://github.com/
.. code :: python
github_archive_near_2015_january_26 = github_wayback_obj.near(
year=2015, month=1, day=26
)
print(github_archive_near_2015_january_26)
.. code :: bash
https://web.archive.org/web/20150127031159/https://github.com
.. code :: python
github_archive_near_2018_4_july_9_2_am = github_wayback_obj.near(
year=2018, month=7, day=4, hour = 9, minute = 2
)
print(github_archive_near_2018_4_july_9_2_am)
.. code :: bash
https://web.archive.org/web/20180704090245/https://github.com/
The library doesn't supports seconds yet. You are encourged to create a
PR ;)
Try this out in your browser @
2020-07-20 06:37:31 +02:00
https://repl.it/@akamhy/WaybackPyNearExample\
2020-07-18 13:23:27 +02:00
Get the content of webpage using get()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code :: python
2020-07-19 17:34:32 +02:00
import waybackpy
2020-07-18 13:23:27 +02:00
2020-07-19 17:34:32 +02:00
google_url = "https://www.google.com/"
2020-07-18 13:23:27 +02:00
2020-07-19 17:34:32 +02:00
User_Agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"
waybackpy_url_object = waybackpy.Url(google_url, User_Agent)
# If no argument is passed in get(), it gets the source of the Url used to create the object.
current_google_url_source = waybackpy_url_object.get()
print(current_google_url_source)
# The following chunk of code will force a new archive of google.com and get the source of the archived page.
# waybackpy_url_object.save() type is string.
google_newest_archive_source = waybackpy_url_object.get(
waybackpy_url_object.save()
)
print(google_newest_archive_source)
2020-07-18 13:24:07 +02:00
2020-07-19 17:34:32 +02:00
# waybackpy_url_object.oldest() type is str, it's oldest archive of google.com
google_oldest_archive_source = waybackpy_url_object.get(
waybackpy_url_object.oldest()
)
print(google_oldest_archive_source)
Try this out in your browser @
2020-07-20 06:37:31 +02:00
https://repl.it/@akamhy/WaybackPyGetExample#main.py\
2020-07-19 17:34:32 +02:00
Count total archives for an URL using total\_archives()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2020-07-18 13:24:07 +02:00
.. code :: python
2020-07-19 17:34:32 +02:00
import waybackpy
URL = "https://en.wikipedia.org/wiki/Python (programming language)"
2020-07-18 13:24:07 +02:00
2020-07-19 17:34:32 +02:00
UA = "Mozilla/5.0 (iPad; CPU OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B435 Safari/600.1.4"
2020-07-18 13:24:07 +02:00
2020-07-19 17:34:32 +02:00
archive_count = waybackpy.Url(
url=URL,
user_agent=UA
).total_archives()
print(archive_count) # total_archives() returns an int
.. code :: bash
2440
Try this out in your browser @
2020-07-20 06:37:31 +02:00
https://repl.it/@akamhy/WaybackPyTotalArchivesExample\
2020-07-18 13:24:07 +02:00
2020-10-02 21:52:51 +02:00
List of URLs that Wayback Machine knows and has archived for a domain name
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1) If alive=True is set, waybackpy will check all URLs to identify the
alive URLs. Don't use with popular websites like google or it would
take too long.
2) To include URLs from subdomain set sundomain=True
.. code :: python
import waybackpy
URL = "akamhy.github.io"
UA = "Mozilla/5.0 (iPad; CPU OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B435 Safari/600.1.4"
known_urls = waybackpy.Url(url=URL, user_agent=UA).known_urls(alive=True, subdomain=False) # alive and subdomain are optional.
print(known_urls) # known_urls() returns list of URLs
.. code :: bash
['http://akamhy.github.io',
'https://akamhy.github.io/waybackpy/',
'https://akamhy.github.io/waybackpy/assets/css/style.css?v=a418a4e4641a1dbaad8f3bfbf293fad21a75ff11',
'https://akamhy.github.io/waybackpy/assets/css/style.css?v=f881705d00bf47b5bf0c58808efe29eecba2226c']
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyKnownURLsToWayBackMachineExample#main.py\
2020-08-09 07:35:04 +02:00
With the Command-line interface
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-07-22 18:05:02 +02:00
Save
^^^^
.. code :: bash
$ waybackpy --url "https://en.wikipedia.org/wiki/Social_media" --user_agent "my-unique-user-agent" --save
https://web.archive.org/web/20200719062108/https://en.wikipedia.org/wiki/Social_media
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyBashSave\
Oldest archive
^^^^^^^^^^^^^^
.. code :: bash
$ waybackpy --url "https://en.wikipedia.org/wiki/SpaceX" --user_agent "my-unique-user-agent" --oldest
https://web.archive.org/web/20040803000845/http://en.wikipedia.org:80/wiki/SpaceX
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyBashOldest\
Newest archive
^^^^^^^^^^^^^^
.. code :: bash
$ waybackpy --url "https://en.wikipedia.org/wiki/YouTube" --user_agent "my-unique-user-agent" --newest
https://web.archive.org/web/20200606044708/https://en.wikipedia.org/wiki/YouTube
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyBashNewest\
Total number of archives
^^^^^^^^^^^^^^^^^^^^^^^^
.. code :: bash
$ waybackpy --url "https://en.wikipedia.org/wiki/Linux_kernel" --user_agent "my-unique-user-agent" --total
853
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyBashTotal\
Archive near time
^^^^^^^^^^^^^^^^^
.. code :: bash
$ waybackpy --url facebook.com --user_agent "my-unique-user-agent" --near --year 2012 --month 5 --day 12
https://web.archive.org/web/20120512142515/https://www.facebook.com/
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyBashNear\
Get the source code
^^^^^^^^^^^^^^^^^^^
.. code :: bash
2020-10-02 21:52:51 +02:00
waybackpy --url google.com --user_agent "my-unique-user-agent" --get url # Prints the source code of the url
waybackpy --url google.com --user_agent "my-unique-user-agent" --get oldest # Prints the source code of the oldest archive
waybackpy --url google.com --user_agent "my-unique-user-agent" --get newest # Prints the source code of the newest archive
waybackpy --url google.com --user_agent "my-unique-user-agent" --get save # Save a new archive on wayback machine then print the source code of this archive.
2020-07-22 18:05:02 +02:00
Try this out in your browser @
https://repl.it/@akamhy/WaybackPyBashGet\
2020-10-02 21:52:51 +02:00
Fetch all the URLs that the Wayback Machine knows for a domain
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1) You can add the '--alive' flag to only fetch alive links.
2) You can add the '--subdomain' flag to add subdomains.
3) '--alive' and '--subdomain' flags can be used simultaneously.
4) All links will be saved in a file, and the file will be created in
the current working directory.
.. code :: bash
pip install waybackpy
# Ignore the above installation line.
waybackpy --url akamhy.github.io --user_agent "my-user-agent" --known_urls
# Prints all known URLs under akamhy.github.io
waybackpy --url akamhy.github.io --user_agent "my-user-agent" --known_urls --alive
# Prints all known URLs under akamhy.github.io which are still working and not dead links.
waybackpy --url akamhy.github.io --user_agent "my-user-agent" --known_urls --subdomain
# Prints all known URLs under akamhy.github.io inclusing subdomain
waybackpy --url akamhy.github.io --user_agent "my-user-agent" --known_urls --subdomain --alive
# Prints all known URLs under akamhy.github.io including subdomain which are not dead links and still alive.
Try this out in your browser @
https://repl.it/@akamhy/WaybackpyKnownUrlsFromWaybackMachine#main.sh\
2020-07-18 13:24:07 +02:00
Tests
-----
2020-10-02 21:52:51 +02:00
`Here <https://github.com/akamhy/waybackpy/tree/master/tests> `__
2020-07-18 13:24:07 +02:00
Dependency
----------
2020-10-02 21:52:51 +02:00
None, just python standard libraries (re, json, urllib, argparse and
datetime). Both python 2 and 3 are supported :)
Packaging
---------
1. Increment version.
2. Build package `` python setup.py sdist bdist_wheel `` .
3. Sign & upload the package `` twine upload -s dist/* `` .
2020-07-18 13:24:07 +02:00
License
-------
2020-10-02 21:52:51 +02:00
Released under the MIT License. See
`license <https://github.com/akamhy/waybackpy/blob/master/LICENSE> `__
for details.
2020-07-18 13:24:07 +02:00
2020-08-09 07:35:04 +02:00
.. |contributions welcome| image :: https://img.shields.io/static/v1.svg?label=Contributions&message=Welcome&color=0059b3&style=flat-square
2020-07-19 17:34:32 +02:00
.. |Build Status| image :: https://img.shields.io/travis/akamhy/waybackpy.svg?label=Travis%20CI&logo=travis&style=flat-square
:target: https://travis-ci.org/akamhy/waybackpy
2020-08-09 07:35:04 +02:00
.. |codecov| image :: https://codecov.io/gh/akamhy/waybackpy/branch/master/graph/badge.svg
:target: https://codecov.io/gh/akamhy/waybackpy
.. |Downloads| image :: https://pepy.tech/badge/waybackpy/month
:target: https://pepy.tech/project/waybackpy/month
2020-07-19 17:34:32 +02:00
.. |Release| image :: https://img.shields.io/github/v/release/akamhy/waybackpy.svg
:target: https://github.com/akamhy/waybackpy/releases
.. |Codacy Badge| image :: https://api.codacy.com/project/badge/Grade/255459cede9341e39436ec8866d3fb65
:target: https://www.codacy.com/manual/akamhy/waybackpy?utm_source=github.com&utm_medium=referral&utm_content=akamhy/waybackpy&utm_campaign=Badge_Grade
.. |Maintainability| image :: https://api.codeclimate.com/v1/badges/942f13d8177a56c1c906/maintainability
:target: https://codeclimate.com/github/akamhy/waybackpy/maintainability
.. |CodeFactor| image :: https://www.codefactor.io/repository/github/akamhy/waybackpy/badge
:target: https://www.codefactor.io/repository/github/akamhy/waybackpy
.. |made-with-python| image :: https://img.shields.io/badge/Made%20with-Python-1f425f.svg
:target: https://www.python.org/
.. |pypi| image :: https://img.shields.io/pypi/v/waybackpy.svg
2020-08-09 07:35:04 +02:00
:target: https://pypi.org/project/waybackpy/
2020-07-19 17:34:32 +02:00
.. |PyPI - Python Version| image :: https://img.shields.io/pypi/pyversions/waybackpy?style=flat-square
.. |Maintenance| image :: https://img.shields.io/badge/Maintained%3F-yes-green.svg
:target: https://github.com/akamhy/waybackpy/graphs/commit-activity
2020-08-09 07:35:04 +02:00
.. |Repo size| image :: https://img.shields.io/github/repo-size/akamhy/waybackpy.svg?label=Repo%20size&style=flat-square
.. |License: MIT| image :: https://img.shields.io/badge/License-MIT-yellow.svg
:target: https://github.com/akamhy/waybackpy/blob/master/LICENSE