Определение количества сайтов на сайте в питоне - PullRequest
0 голосов
/ 09 июля 2010

У меня есть следующая ссылка:

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

ссылочная часть URL содержит следующую информацию:

A7 == Парламент (нынешний седьмой парламент, первый - A6 и т. Д.)

2010 == год

0001 == номер документа

Для каждого года и парламента я хотел бы указать количество документов на веб-сайте. Задача усложняется тем, что, например, в 2010 году номера 186, 195 196 имели пустые страницы, а максимальное число - 214. В идеале на выходе должен быть вектор со всеми номерами документов, исключая отсутствующие.

Может кто-нибудь сказать мне, если это возможно в Python?

Бест, Томас

Ответы [ 3 ]

3 голосов
/ 09 июля 2010

Во-первых, убедитесь, что очистка их сайта является законной.

Во-вторых, обратите внимание, что когда документ отсутствует, файл HTML содержит:

<title>Application Error</title>

В-третьих, используйте urllib дляпереберите все, что вы хотите:

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
1 голос
/ 09 июля 2010

Вот решение, но неплохо добавить время ожидания между запросами:

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()
1 голос
/ 09 июля 2010

Вот немного более полный (но хакерский) пример, который, кажется, работает (с использованием urllib2) - я уверен, что вы можете настроить его под свои конкретные потребности.

Я бы также повторил предупреждение Арриеты о том, чтобы убедиться, что владелец сайта не возражает против того, чтобы вы удалили его содержимое.

#!/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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...