2015-08-27 2 views
1

я следующее:Как сцепить LXML строку с другой строкой в ​​Python

import urllib 
import lxml.html 

connection = urllib.urlopen('http://example.com') 
dom = lxml.html.fromstring(connection.read()) 

for link in dom.xpath('//div[@id="right-column"]//a/@href'): 
    print link 

Моя проблема заключается в том, что каждый link из этого for loop не содержит весь путь ссылки, но только то, что приходит после http://example.com.

Пример переменной ссылка:

/andrew-darius-et-al-mob-app-maker 
/andrew-darius-et-al-explaindio-3-0 

Теперь, что я хотел бы сделать, это конкатенация connection и link в этом for петли, так что у меня будет полный путь:

http://example.com/andrew-darius-et-al-mob-app-maker 
http://example.com/andrew-darius-et-al-explaindio-3-0 

EDIT 1:

import urllib 
import lxml.html 
from urlparse import urljoin 

URL = urllib.urlopen('http://muncheye.com') 
dom = lxml.html.fromstring(URL.read()) 

for link in dom.xpath('//div[@id="right-column"]//a/@href'): 
    FINAL_URL = urljoin('http://muncheye.com', link) 
    print FINAL_URL 
+1

Что не так с 'print 'http://example.com' + link'? –

+4

Безопасный способ сделать это, чтобы использовать [urlparse.urljoin] (https://docs.python.org/2/library/urlparse.html#urlparse.urljoin) –

+0

@ParkerHoyes Я не знаю, насколько это безопасно повторное использование этой строки –

ответ

3

Используйте urljoin, чтобы сделать URL абсолютным. Вы должны знать, что HTML-файлы могут устанавливать свой базовый url с базовым тегом. Поэтому я также счел, что также:

import urlparse 
import lxml.html 

URL = 'http://example.com' 
dom = lxml.html.parse(URL) 
url = dom.docinfo.URL 
base = dom.find('head/base') 
if base: 
    url = base.get('href', url) 

for link in dom.xpath('//div[@id="right-column"]//a/@href'): 
    print urlparse.urljoin(url, link) 
+0

Спасибо, это работает. Как насчет редактирования, которое я сделал? было бы также хорошим решением? –

+0

@ Александр: если этот ответ вам помог, отметьте его как принятый. –