2013-04-19 4 views
0

Я пытаюсь проанализировать данные со страницы с помощью python, который может быть довольно простым, но все данные скрыты под элементами jquery и что затрудняет захват данных. Пожалуйста, простите меня, поскольку я новичок на Python и программирование в целом, так что все еще знакомлюсь с ним. Веб-сайт, который я получаю, это http://www.asusparts.eu/partfinder/Asus/All В One/E Series, поэтому мне просто нужны все данные из E Это код я до сих пор:Анализ содержимого из меню выбора, Python + BeautifulSoup

import string, urllib2, csv, urlparse, sys 
from bs4 import BeautifulSoup 

changable_url = 'http://www.asusparts.eu/partfinder/Asus/All%20In%20One/E%20Series' 
page = urllib2.urlopen(changable_url) 
base_url = 'http://www.asusparts.eu' 
soup = BeautifulSoup(page) 

redirects = [] 
model_info = [] 

select = soup.find(id='myselectListModel') 
print select.get_text() 


options = select.findAll('option') 

for option in options: 
    if(option.has_attr('redirectvalue')): 
     redirects.append(option['redirectvalue']) 

for r in redirects: 
    rpage = urllib2.urlopen(base_url + r.replace(' ', '%20')) 
    s = BeautifulSoup(rpage) 
    print s 

    sys.exit() 

Однако единственная проблема, она просто выводит данные для первой модели, которая Asus-> Все В Одно-> E Series-> ET10B-> AC адаптер. Фактическая страница HTML печатается как following... (выход был слишком длинным - просто вставил необходимый основной выход)

Я не уверен, как я мог бы захватить данные для всех частей серии E, поскольку я предположил, что это все захватит? Также я был бы признателен, если бы какие-либо ответы, которые вы показываете, относятся к текущему методу, который я использую, так как это отвечает ответственному лицу, спасибо.

[EDIT]

Это, как я пытаюсь разобрать HTML:

for r in redirects: 
    rpage = urllib2.urlopen(urljoin(base_url, quote(r))) 
    s = BeautifulSoup(rpage) 
    print s 

    data = soup.find(id='accordion') 

    selection = data.findAll('td') 

    for s in selections: 
     if(selection.has_attr('class', 'ProduktLista')): 
      redirects.append(td['class', 'ProduktLista']) 

Это ошибка я придумал:

Traceback (most recent call last): 
    File "C:\asus.py", line 31, in <module> 
    selection = data.findAll('td') 
AttributeError: 'NoneType' object has no attribute 'findAll' 
+0

У вас есть 'sys.exit()' * внутри * 'для г в цикле redirects', так что не удивительно, только первая модель страница. Начните с использования 'sys.exit()'. –

+0

С помощью 'sys.exit()' удаленный ваш скрипт выводит все страницы. –

ответ

0

Вам нужно удалите sys.exit(), который у вас есть в вашей петле:

for r in redirects: 
    rpage = urllib2.urlopen(base_url + r.replace(' ', '%20')) 
    s = BeautifulSoup(rpage) 
    print s 

    # sys.exit() # remove this line, no need to exit your program 

Вы также можете использовать urllib.quote, чтобы правильно указывать URL-адреса, которые вы получаете из раскрывающегося списка; это устраняет необходимость вручную заменять пробелы '%20'. Используйте urlparse.urljoin() построить окончательный URL:

from urllib import quote 
from urlparse import 

for r in redirects: 
    rpage = urllib2.urlopen(urljoin(base_url, quote(r))) 
    s = BeautifulSoup(rpage) 
    print s 
+0

Ahh да спасибо .. что показывает все данные для AC ADAPTER, но он не отображает данные для всех остальных категорий? Такие, как скобки, кабели и т. Д. Редактирование выше показывает, как я закодировал это, однако я придумал ошибку, описанную выше. – ash

+0

@ash: всякий раз, когда вы видите объект «NoneType», исключение атрибута «findAll» не означает, * previous * search не дал никаких результатов. 'soup.find (id = 'accordion')' в этом случае ничего не возвращает, поэтому проверьте загружаемые страницы. –

+0

Я заметил, что он просто получает данные с внешней страницы по умолчанию, а не загружает страницу, отображающую все категории, такие как скобки, кабели и т. Д. Поскольку новая таблица появляется после того, как выбран последний снимок. Как я могу найти данные после появления таблицы? – ash

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