2016-01-23 3 views
0

В качестве фона я очищаю веб-страницу в Python и пользуюсь BeautifulSoup.Очистка информации от hoverbox

Некоторая информация, которая мне нужна для доступа, представляет собой небольшую рамку о пользовательских профайлах, которая появляется, когда мышь нависает над изображением профиля пользователя. Проблема, в том, что эта информация не доступна в формате HTML, вместо этого, я получаю следующее:

«» класс = «ДИВ имя пользователя мо» пролетных класс = «expand_inline scrname mbrName_1586A02614A388AEE215B4A3139A2C18» OnClick = "ta.trackEventOnPage ('Отзывы', 'show_reviewer_info_window', 'user_name_name_click') "> Sapphire-Ed "" (я удалил некоторые> ы так, что HTML будет отображаться в вопросе, извините!)

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

Вот веб-страницы, если это полезно: вид источника: http://www.tripadvisor.com/Attraction_Review-g143010-d108269-Reviews-Cadillac_Mountain-Acadia_National_Park_Mount_Desert_Island_Maine.html информация Я пытаюсь получить доступ является распределение обзора.

ответ

1

Ниже приведен полный рабочий код, который выводит словарь, в котором ключи являются именами пользователей, а значения - обзорными. Чтобы понять, как работает код, вот ключевые моменты, которые следует принимать во счета:

  • информацию в наложении появляясь на мыши над загружается динамически с помощью запроса HTTP GET с числом параметров, определенных пользователем - наиболее важными из них являются uid и src
  • в uid и src значения могут быть извлечены с помощью регулярного выражения из атрибута id для каждого профиля пользователя элемента
  • ответ на этот запрос GET является HTML, который нужно разобрать с BeautifulSoup также
  • вы должны поддерживать веб-соскоб сессию requests.Session

Код:

import re 
from pprint import pprint 

import requests 
from bs4 import BeautifulSoup 

data = {} 

# this pattern would help us to extract uid and src needed to make a GET request 
pattern = re.compile(r"UID_(\w+)-SRC_(\w+)") 

# making a web-scraping session 
with requests.Session() as session: 
    response = requests.get("http://www.tripadvisor.com/Attraction_Review-g143010-d108269-Reviews-Cadillac_Mountain-Acadia_National_Park_Mount_Desert_Island_Maine.html") 
    soup = BeautifulSoup(response.content, "lxml") 

    # iterating over usernames on the page 
    for member in soup.select("div.member_info div.memberOverlayLink"): 
     # extracting uid and src from the `id` attribute 
     match = pattern.search(member['id']) 
     if match: 
      username = member.find("div", class_="username").text.strip() 
      uid, src = match.groups() 

      # making a GET request for the overlay information 
      response = session.get("http://www.tripadvisor.com/MemberOverlay", params={ 
       "uid": uid, 
       "src": src, 
       "c": "", 
       "fus": "false", 
       "partner": "false", 
       "LsoId": "" 
      }) 

      # getting the grades dictionary 
      soup_overlay = BeautifulSoup(response.content, "lxml") 
      data[username] = {grade_type: soup_overlay.find("span", text=grade_type).find_next_sibling("span", class_="numbersText").text.strip("()") 
           for grade_type in ["Excellent", "Very good", "Average", "Poor", "Terrible"]} 


pprint(data) 

распечаток:

{'Anna T': {'Average': '2', 
      'Excellent': '0', 
      'Poor': '0', 
      'Terrible': '0', 
      'Very good': '2'}, 
'Arlyss T': {'Average': '0', 
       'Excellent': '6', 
       'Poor': '0', 
       'Terrible': '0', 
       'Very good': '1'}, 
'Bf B': {'Average': '1', 
      'Excellent': '22', 
      'Poor': '0', 
      'Terrible': '0', 
      'Very good': '17'}, 
'Charmingnl': {'Average': '15', 
       'Excellent': '109', 
       'Poor': '4', 
       'Terrible': '4', 
       'Very good': '45'}, 
'Jackie M': {'Average': '2', 
       'Excellent': '10', 
       'Poor': '0', 
       'Terrible': '0', 
       'Very good': '4'}, 
'Jonathan K': {'Average': '69', 
       'Excellent': '90', 
       'Poor': '6', 
       'Terrible': '0', 
       'Very good': '154'}, 
'Sapphire-Ed': {'Average': '8', 
       'Excellent': '47', 
       'Poor': '2', 
       'Terrible': '0', 
       'Very good': '49'}, 
'TundraJayco': {'Average': '14', 
       'Excellent': '59', 
       'Poor': '0', 
       'Terrible': '1', 
       'Very good': '49'}, 
'Versrii': {'Average': '2', 
      'Excellent': '8', 
      'Poor': '0', 
      'Terrible': '0', 
      'Very good': '10'}, 
'tripavisor83': {'Average': '12', 
        'Excellent': '9', 
        'Poor': '1', 
        'Terrible': '0', 
        'Very good': '20'}} 
+0

ты святой! ;-) Всем удачи. – shellter

+0

Это потрясающе! Спасибо за помощь! – Amie

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