我正在尝试使用 python 解析页面中的数据,这可能非常简单,但所有数据都隐藏在 jquery 元素下,这使得获取数据变得更加困难。请原谅我,因为我是 Python 和整体编程的新手,所以仍然熟悉它。我从中获取它的网站是http://www.asusparts.eu/partfinder/Asus/All In 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()
但是唯一的问题是,它只打印出第一个型号的数据,即 Asus->All In One->E 系列->ET10B->AC Adapter。实际的 HTML 页面打印如下...(输出太长 - 只是粘贴了所需的主要输出)
我不确定如何获取所有 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'