2015-10-19 3 views
0

Я пытаюсь собрать кучу ссылок, используя xpath, которые нужно очистить со следующей страницы, однако я продолжаю получать ошибку, которая может анализировать только строки? Я попытался взглянуть на тип lk, и это была строка после того, как я ее бросил? Что кажется неправильным?ValueError: может только анализировать строки python

def unicode_to_string(types): 
    try: 
     types = unicodedata.normalize("NFKD", types).encode('ascii', 'ignore') 
     return types 
    except: 
     return types 

def getData(): 
    req = "http://analytical360.com/access-points" 
    page = urllib2.urlopen(req) 
    tree = etree.HTML(page.read()) 
    i = 0 
    for lk in tree.xpath('//a[@class="sabai-file sabai-file-image sabai-file-type-jpg "]//@href'): 
     print "Scraping Vendor #" + str(i) 
     trees = etree.HTML(urllib2.urlopen(unicode_to_string(lk))) 
     for ll in trees.xpath('//table[@id="archived"]//tr//td//a//@href'): 
     final = etree.HTML(urllib2.urlopen(unicode_to_string(ll))) 
+1

Можете ли вы опубликовать полную информацию о трассировке? – jgritty

+1

В одной части у вас есть 'page = urllib2.urlopen (req); etree.HTML (page.read()) 'в следующей части у вас есть' etree.HTML (urllib2.urlopen (unicode_to_string (ll))) 'отсутствует' .read() 'в возвращаемом объекте urlopen. – TessellatingHeckler

+1

Вам нужно передать строку, а не объект urllib2.urlopen, в 'unicode_to_string' –

ответ

1

Вы должны передать строки не urllib2.orlopen.

Возможно изменить код следующим образом:

trees = etree.HTML(urllib2.urlopen(unicode_to_string(lk)).read()) 
    for i, ll in enumerate(trees.xpath('//table[@id="archived"]//tr//td//a//@href')): 
     final = etree.HTML(urllib2.urlopen(unicode_to_string(ll)).read()) 

Кроме того, вы, кажется, не увеличивать i.

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