2010-07-07 8 views
1

J'utilise actuellement watir pour faire un web scraping d'un site web cachant toutes les données de la source HTML habituelle. Si je ne me trompe pas, ils utilisent XML et la technologie AJAX pour le cacher. Firefox peut le voir mais il est affiché via "DOM Source de sélection".web scraping en mode txt

Tout fonctionne bien mais maintenant je cherche un outil équivalent à watir mais tout doit être fait sans navigateur. Tout doit être fait dans un fichier txt.

En fait, pour l'instant, watir utilise mon navigateur pour émuler la page et me retourner tout le code html que je cherche. Je voudrais la même chose mais sans le navigateur.

Est-ce possible?

Merci Cordialement Tak

Répondre

1

Votre meilleure estimation serait d'utiliser quelque chose comme webscarab et capturer les URLS de la demande AJAX votre navigateur est en train de faire. De cette façon, vous pouvez simplement saisir vous-même les données "importantes" en simulant ces appels avec n'importe quelle bibliothèque HTTP.

0

Il est possible avec un peu de codage Python. J'ai écrit un script simple pour aller chercher les emplacements des bureaux de fret.

Premiers pas

  1. Ouvrez la page ajax avec Google Chrome par exemple, en turc, mais vous pouvez le comprendre. http://www.yurticikargo.com/bilgi-servisleri/Sayfalar/en-yakin-sube.aspx
  2. Appuyez sur F12 pour afficher les outils de développement inférieurs et accédez à l'onglet Réseau.
  3. Naviguer XHR dans le bas.
  4. Effectuez une requête AJAX en sélectionnant un élément dans la première liste déroulante. Et allez à têtes Tab
  5. Vous GetTownByCity le volet de gauche, cliquez dessus et l'inspecter.

    Request URL: (...)/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy- sswservices.aspx/GetTownByCity

    Request Method:POST

    Status Code:200 OK

  6. Dans l'élément d'arborescence Request Payload vous verrez

    Request Payload :{cityId:34} tête .

  7. Cela nous guidera pour implémenter un code python.

Faisons-le.

#!/usr/bin/env python 
# -*- coding: utf-8 -*-  
import requests 
import json 
# import simplejson as json 
baseUrl = 'http://www.yurticikargo.com/' 
ajaxRoot = '_layouts/ArikanliHolding.YurticiKargo.WebSite/' 
getTown = 'ajaxproxy-sswservices.aspx/GetTownByCity' 
urlGetTown = baseUrl + ajaxRoot + getTown 
headers = {'content-type': 'application/json','encoding':'utf-8'} # We are sending JSON headers, equivalent to Python dictionary 
for plaka in range(1,82): # Because Turkiye has number plates from 1 to 81 
    payload = {'cityId':plaka} 
    r = requests.post(url, data=json.dumps(payload), headers=headers) 
    data = r.json() # Returning data is in JSON format, if you need HTML use r.content() 
    # ... Process the fetched data with JSON parser, 
    # If HTML format, Beautiful Soup, Lxml, or etc... 

Notez que ce code est une partie de mon code de travail et il est écrit à la volée, le plus important est que je ne pas testé. Il peut nécessiter de petites modifications pour l'exécuter.

Questions connexes