2014-09-24 3 views
2

Я пытаюсь очистить список URL из Законодательной обсерватории Европейского парламента. Я не использую ни одного ключевого слова поиска, чтобы получить все ссылки на документы (в настоящее время 13172). Я могу легко очистить список первых 10 результатов, которые отображаются на веб-сайте, используя приведенный ниже код. Тем не менее, я хочу иметь все ссылки, чтобы мне не нужно было так или иначе нажимать кнопку следующей страницы. Пожалуйста, дайте мне знать, знаете ли вы, как это сделать.Показать все результаты поиска, когда веб-скребок с Python

import requests, bs4, re 

# main url of the Legislative Observatory's search site 
url_main = 'http://www.europarl.europa.eu/oeil/search/search.do?searchTab=y' 

# function gets a list of links to the procedures 
def links_to_procedures (url_main): 
    # requesting html code from the main search site of the Legislative Observatory 
    response = requests.get(url_main) 
    soup = bs4.BeautifulSoup(response.text) # loading text into Beautiful Soup 
    links = [a.attrs.get('href') for a in soup.select('div.procedure_title a')] # getting a list of links of the procedure title 
    return links 

print(links_to_procedures(url_main)) 

ответ

0

Вы можете следить за пагинацией, указав параметр page GET.

Сначала получите количество результатов, а затем подсчитайте количество обрабатываемых страниц, разделив счетчик на количество результатов на страницу. Затем перебирайте страницы один за другим и собирайте ссылки:

import re 

from bs4 import BeautifulSoup 
import requests 

response = requests.get('http://www.europarl.europa.eu/oeil/search/search.do?searchTab=y') 
soup = BeautifulSoup(response.content) 

# get the results count 
num_results = soup.find('span', class_=re.compile('resultNum')).text 
num_results = int(re.search('(\d+)', num_results).group(1)) 
print "Results found: " + str(num_results) 

results_per_page = 50 
base_url = "http://www.europarl.europa.eu/oeil/search/result.do?page={page}&rows=%s&sort=d&searchTab=y&sortTab=y&x=1411566719001" % results_per_page 

links = [] 
for page in xrange(1, num_results/results_per_page + 1): 
    print "Current page: " + str(page) 

    url = base_url.format(page=page) 
    response = requests.get(url) 

    soup = BeautifulSoup(response.content) 
    links += [a.attrs.get('href') for a in soup.select('div.procedure_title a')] 

print links 
+0

Спасибо! Это работает отлично. – philipp

Смежные вопросы