从选择菜单中解析内容,Python + BeautifulSoup

时间:2013-04-19 09:20:15

标签: python beautifulsoup html-parsing urllib2

我正在尝试使用python从页面解析数据,这可能非常简单,但所有数据都隐藏在jquery元素下,这使得抓取数据变得更加困难。请原谅我,因为我是Python的新手和编程整体,所以仍然熟悉它。我得到它的网站是http://www.asusparts.eu/partfinder/Asus/All在One / E系列所以我只需要来自E的所有数据这是我到目前为止的代码:

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()

然而唯一的问题是,它只打印出第一个模型的数据 华硕 - >一体化 - > E系列 - > ET10B-> AC适配器。实际的HTML页面打印出像following...(输出太长 - 只需粘贴所需的主输出)

我不确定如何获取所有E系列部件的数据,因为我认为这样可以抓住所有东西?此外,我将不胜感激,如果您显示的任何答案与我正在使用的当前方法有关,因为这是负责人希望它完成的方式,谢谢。

[编辑]

这就是我试图解析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'

1 个答案:

答案 0 :(得分: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来正确引用从选项下拉列表中获得的网址;这样就无需用'%20'手动替换空格。使用urlparse.urljoin()构建最终网址:

from urllib import quote
from urlparse import 

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