2014-10-24 2 views
-1

Я следующий сценарий, чтобы найти изображение на странице, и загрузить его:Почему я не могу получить URL-адрес из запроса XPath?

from lxml import html 
import urllib 
import urllib2 

url = 'http://www.example.com/pages/page0987/' 
usock = urllib2.urlopen(url) 
data = usock.read() 
usock.close() 

tree = html.fromstring(data) 

src = tree.xpath('/html/body/div[2]/div[4]/div/div/img/@src') 
urllib.urlretrieve(src, "local-filename.jpg") 

Я получаю веб-страницы, доступ к <img> элемент на этой странице (I тр, чтобы найти его с помощью запроса XPath), то я получаю атрибут src этого элемента, а затем попытаюсь загрузить изображение с помощью этого URL-адреса из источника.

Но что-то не так; Python говорит:

Traceback (most recent call last): 
    File "C:\Users\Sergey\Desktop\dlImg.py", line 15, in <module> 
    urllib.urlretrieve(src, "local-filename.jpg") 
    File "C:\Python27\lib\urllib.py", line 94, in urlretrieve 
    return _urlopener.retrieve(url, filename, reporthook, data) 
    File "C:\Python27\lib\urllib.py", line 228, in retrieve 
    url = unwrap(toBytes(url)) 
    File "C:\Python27\lib\urllib.py", line 1060, in unwrap 
    url = url.strip() 
AttributeError: 'list' object has no attribute 'strip' 

ответ

2

Ваш tree.xpath() запрос возвращает список , ни одного матча. По крайней мере, индекс для первого элемента:

urllib.urlretrieve(src[0], "local-filename.jpg") 

или использовать петлю над результатами. Учтите, что список также может быть пустым (совпадений не найдено).

+0

Спасибо! Оно работает! –

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