2016-04-04 2 views
0

Я пытаюсь очистить содержимое страницы Financial Times Search.Python-запросы: не удается удалить весь код html со страницы

Используя Requests, я могу легко отказаться от названий статей и гиперссылок.

Я хотел бы получить гиперссылку следующей страницы, но я не могу найти ее в ответе Запросы, в отличие от названий статей или гиперссылок. Функция

from bs4 import BeautifulSoup 
import requests 

url = 'http://search.ft.com/search?q=SABMiller+PLC&t=all&rpp=100&fa=people%2Corganisations%2Cregions%2Csections%2Ctopics%2Ccategory%2Cbrand&s=-lastPublishDateTime&f=lastPublishDateTime[2000-01-01T00%3A00%3A00%2C2016-01-01T23%3A59%3A59]&curations=ARTICLES%2CBLOGS%2CVIDEOS%2CPODCASTS&highlight=true&p=1et' 

response = requests.get(url, auth=(my login informations)) 

soup = BeautifulSoup(response.text, "lxml") 

def get_titles_and_links(): 
    titles = soup.find_all('a') 
    for ref in titles: 
     if ref.get('title') and ref.get('onclick'): 
      print ref.get('href') 
      print ref.get('title') 

В get_titles_and_links() дает мне названия и ссылки всех статей.

Однако, с аналогичной функцией для следующей страницы, у меня нет никаких результатов:

def get_next_page(): 
    next_page = soup.find_all("li", class_="page next") 
    return next_page 

Или:

def get_next_page(): 
    next_page = soup.find_all('li') 
    for ref in next_page: 
     if ref.get('page next'): 
      print ref.get('page next') 

ответ

1

Если вы можете увидеть необходимые ссылки на исходный код страницы, но не смогли получить их через requests или urllib. Это может означать две вещи.

  1. С вашей логикой что-то не так. Предположим, это не так.
  2. Тогда вещь остается: Ajax те части страницы, которую вы ищете загружены Javascript после метод document.onload увольняют. Таким образом, вы не можете получить то, чего нет в первую очередь.

Мои решения (больше как предложения) являются

  1. перепроектировать сетевые запросы. Сложный, но универсальный подход. Я лично это делаю. Возможно, вы захотите использовать модуль re.
  2. Найти что-то, что оказывает javascript. Это просто сказать, что имитирует просмотр в Интернете. Вы можете проверить webdriver компонент selenium, Qt и т. Д. Это проще, но любопытная память голодает и потребляет намного больше сетевого ресурса по сравнению с 1.
+0

Спасибо за ваш ответ, это помогло мне понять мою проблему. Я использовал модуль [https://github.com/niklasb/dryscrape], чтобы очистить веб-страницу. – Baptiste

+0

Если это сработало, это здорово. Но обратное проектирование сетевых запросов делает концепции эффектно понятными. Но это требует времени. –

+0

Ну, честно говоря, с быстрым поиском в Интернете, который я сделал после вашего ответа, я не нашел никаких ясных (мне) объяснений об обратном проектировании сетевых запросов. И, я должен сказать, люблю быстрое и простое решение. – Baptiste

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