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

2024-10-02 02:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用python解析页面中的数据,这很简单,但是所有的数据都隐藏在jquery元素下,这使得获取数据变得更加困难。请原谅我,因为我是Python和编程的新手,所以仍然对它很熟悉它。那个我从中得到的网站是http://www.asusparts.eu/partfinder/Asus/All在一个/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->;交流适配器。实际的HTML页面打印出来就像following...(输出太长-只是粘贴了所需的主输出)

我不确定我将如何获取所有E系列零件的数据,因为我假设这将获取所有的数据?另外,如果您提供的任何答案与我目前使用的方法有关,我将不胜感激,因为这是负责人希望它完成的方式,谢谢。在

[编辑]

这就是我试图解析HTML的方法:

^{pr2}$

这是我得出的错误:

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

Tags: 数据ingthttpurlwww页面urllib2
1条回答
网友
1楼 · 发布于 2024-10-02 02:39:11

您需要删除循环中的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:

^{pr2}$

相关问题 更多 >

    热门问题