[PYTHON] Explorer et gratter n'importe quel site avec mitmproxy

Cet article est le 19ème jour du Calendrier de l'Avent Crawler / Web Scraping 2016.

Tout d'abord, mitmproxy n'est ni un outil de grattage ni un outil d'exploration **, mais c'est le but de cet article de l'utiliser pour le grattage. ..

L'arme ultime appelée mtimproxy

Comme son nom l'indique, mtimproxy est ** proxy **, ce qui semble être une abréviation pour man-in-the-middle proxy. OSS fait par Python.

Cela ressemble à ceci dans un diagramme. Pour ainsi dire, est-ce l'image d'un proxy qui s'attaque lui-même en tant qu'intermédiaire?

image

Je l'ai écrit moi-même et j'ai été un peu surpris car c'était un chiffre sans signification, mais avec mitmproxy,

Cela signifie que vous pouvez ** traiter automatiquement tous les sites que vous visitez avec un script Python **.

Être capable de traiter une réponse en Python signifie que vous pouvez enregistrer la réponse, afin qu'elle puisse être utilisée comme une sorte d'outil d'exploration **.

Bien sûr, mitmproxy n'est qu'un outil proxy, vous ne pouvez donc pas explorer automatiquement aucune stratégie. Cette fois, la stratégie consiste pour ** les humains à fonctionner comme des araignées (robots) ** et à enregistrer et à gratter les résultats de la navigation **.

Cas d'utilisation spécifique

Laissez-moi vous expliquer pourquoi le grattage avec mitmproxy est le plus fort.

--L'humain décide de la page à télécharger, mais l'humain est plus intelligent que le bot (à partir de 2016) --L'humain se comporte plus naturellement que le bot (à partir de 2016) --Si vous pouvez utiliser un proxy, vous pouvez enregistrer tout type de site

Par exemple, existe-t-il les cas d'utilisation suivants?

--Je souhaite explorer l'API des sites Javascript ou Flash ――Je veux analyser le site que j'ai vu en un jour

Au contraire, je ne pense pas que les éléments suivants conviennent.

--Je veux ramper régulièrement ――Je veux explorer des sites partout dans le monde par moi-même --Je veux explorer les résultats sur les sites où le rendu Javascript est important, comme SPA

Installez mitmproxy

L'installation est simple. Si vous êtes bloqué dans l'installation, utilisez la [version Docker] officielle (https://hub.docker.com/r/mitmproxy/mitmproxy/).

pip install mitmproxy

mitmproxy a deux outils. mitmproxy et mitmdump. Le premier est un CUI et un outil interactif. Ce dernier n'a aucune interaction et convient aux applications de grattage.

La méthode de démarrage est simple, tapez simplement «mitmdump» dans le shell. Par défaut, il démarre sur le port 8080, vous pouvez donc spécifier 127.0.0.1: 8080 comme proxy (dans Chrome, Proxy SwitchySharp. L'extension / webstore / detail / proxy-switchysharp / dpplabbmogkhghncfbfdeeokoefdjegm? Hl = ja) est facile à utiliser).

Si les paramètres de proxy réussissent, ouvrez le site approprié. Si tout se passe bien, le contenu reçu par mtimdump devrait ressembler à ceci:

image

Méthode de grattage avec mitmproxy

Voici comment exécuter un script Python avec mitmproxy.

mitmdump -s path_to_script.py

Par exemple, le script à exécuter peut être le suivant. L'exemple suivant réduit le type de contenu à «text / html» et l'enregistre.

def response(flow):
    content_type = flow.response.headers.get('Content-Type', '')
    path = flow.request.url.replace('/', '_').replace(':', '_')
    if content_type.startswith('text/html'):
        with open(path, 'w') as f:
            f.write(flow.response.text)

Bien sûr, je pense que vous devriez extraire les éléments en utilisant lxml, etc., le cas échéant.

D'autres exemples qui couvrent les fonctionnalités de mitmproxy sont sur GitHub.

Résumé

J'ai introduit la technique d'exploration en utilisant mitmproxy. Les êtres humains sont les meilleurs!

J'ai omis l'explication, mais il prend également en charge les sites SSL (veuillez google pour plus de détails).

Mise en garde

Cette méthode est, pour ainsi dire, une méthode comme une attaque intermédiaire. Si vous essayez d'attaquer quelqu'un sans votre consentement, ce sera un bon crime, alors ne le faites pas. Pour la fin, utilisons-le pour enregistrer et analyser le site que vous avez parcouru. De plus, arrêtez d'utiliser les API privées qui sont interdites par nos conditions d'utilisation.

Recommended Posts

Explorer et gratter n'importe quel site avec mitmproxy
Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python
J'ai essayé de ramper et de gratter le site de courses de chevaux Partie 2
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Site de courses de chevaux Web scraping avec Python
Scraping depuis un site authentifié avec python
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
Grattage au sélénium
Grattage de la nourriture avec python et sortie en CSV
Grattage au sélénium ~ 2 ~
Grattage avec Python
Gratter l'holojour et l'afficher dans la CLI
Grattage avec Python
Grattage avec du sélénium
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Grattage réussi avec Selenium
Essayez de gratter avec Python.
Grattage avec Python + PhantomJS
Grattage avec coquille tremblante
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Gratter avec une belle soupe
Avec et sans WSGI
Scraping RSS avec Python
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack