2010-07-09 4 views
0

je le lien suivant:Détermination du nombre de sites sur un site Web en python

http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-0001&language=EN

la partie de référence de l'URL contient les informations suivantes:

A7 == Le Parlement (en cours est la septième législature, l'ancien est A6 et ainsi de suite)

2010 années ==

0001 numéro ==

Pour chaque année et le Parlement, je voudrais identifier le nombre de documents sur le site. La tâche est compliquée par le fait que, pour 2010, par exemple, les numéros 186, 195196 ont des pages vides, tandis que le nombre maximum est idéalement la sortie 214. devrait être un vecteur avec tous les numéros de documents, à l'exception ceux qui manquent.

Quelqu'un peut-il me dire si cela est possible en python?

Best, Thomas

Répondre

1

est ici une solution, mais en ajoutant un certain délai d'attente entre la demande est une bonne idée:

import urllib 
URL_TEMPLATE="http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-%d-%.4d&language=EN" 
maxRange=300 

for year in [2010, 2011]: 
    for page in range(1,maxRange): 
     f=urllib.urlopen(URL_TEMPLATE%(year, page)) 
     text=f.read() 
     if "<title>Application Error</title>" in text: 
      print "year %d and page %.4d NOT found" %(year, page) 
     else: 
      print "year %d and page %.4d FOUND" %(year, page) 
     f.close() 
+0

Merci beaucoup, toutes les réponses sont vraiment de beaux exemples! –

3

Tout d'abord, assurez-vous que gratter leur site est légal.

En second lieu, avis que lorsqu'un document n'est pas présent, le fichier HTML contient:

<title>Application Error</title> 

Troisièmement, utiliser urllib itérer sur toutes les choses que vous voulez:

for p in range(1,7): 
for y in range(2000, 2011): 
    doc = 1 
    while True: 
    # use urllib to open the url: (root)+p+y+doc 
    # if the HTML has the string "application error" break from the while 
    doc+=1 
+0

Merci, très utile! Le site est public (ce sont nos parlementaires élus après tout :)) donc je suppose que l'aspect légal ne devrait pas être un problème. –

1

est ici un exemple un peu plus complet (mais hacky) qui semble fonctionner (en utilisant urllib2) - Je suis sûr que vous pouvez le personnaliser pour vos besoins spécifiques. Je voudrais également répéter l'avertissement de Arrieta à propos de s'assurer que le propriétaire du site ne dérange pas que vous racliez son contenu.

#!/usr/bin/env python 
import httplib2 
h = httplib2.Http(".cache") 

parliament = "A7" 
year = 2010 

#Create two lists, one list of URLs and one list of document numbers. 
urllist = [] 
doclist = [] 

urltemplate = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=%s-%d-%04u&language=EN" 

for document in range(0,9999): 
    url = urltemplate % (parliament,year,document) 
    resp, content = h.request(url, "GET") 
    if content.find("Application Error") == -1: 
     print "Document %04u exists" % (document)  
     urllist.append(urltemplate % (parliament,year,document)) 
     doclist.append(document) 
    else: 
     print "Document %04u doesn't exist" % (document) 
print "Parliament %s, year %u has %u documents" % (parliament,year,len(doclist)) 
+0

Merci Jon pour la réponse très élaborée, ce qui est excellent truc pour un gars python d'apprentissage! –

Questions connexes