2013-09-09 2 views
1

У меня есть этот код:Как получить ссылку insdie тег li?

import urllib 
from bs4 import BeautifulSoup 
url = "http://download.cnet.com/windows/" 
pageHtml = urllib.urlopen(url) 
soup = BeautifulSoup(pageHtml) 
for a in soup.select("div.catFlyout a[href]"): 
    print "http://download.cnet.com"+a["href"] 

Но этот код не дал правильный вывод. правильный вывод должен быть таким:

http://download.cnet.com/windows/security-software/ 
http://download.cnet.com/windows/browsers/ 
http://download.cnet.com/windows/business-software/ 
.. 
.. 
http://download.cnet.com/windows/video-software/ 

ответ

1

Есть некоторые относительные и абсолютные ссылки в списке, перед именем базы URL только если ссылка начинается с http:

for a in soup.select("div.catFlyout a[href]"): 
    if not a["href"].startswith("http"): 
     print "http://download.cnet.com"+a["href"] 
    else: 
     print a["href"] 

Или используйте urlparse для проверить, если связь является абсолютным или нет (из here):

import urllib 
import urlparse 
from bs4 import BeautifulSoup 

def is_absolute(url): 
    return bool(urlparse.urlparse(url).scheme) 

url = "http://download.cnet.com/windows/" 
pageHtml = urllib.urlopen(url) 
soup = BeautifulSoup(pageHtml) 
for a in soup.select("div.catFlyout a[href]"): 
    if not is_absolute(a['href']): 
     print "http://download.cnet.com"+a["href"] 
    else: 
     print a["href"] 
+0

Как если хотите принять только ссылку категории, а не все суб внутри категория? @alexce –

+0

@wanmohdpayed, что вы подразумеваете под категориями ссылок? Ссылки, которые не заканчиваются на 'html'? – alecxe

+0

Я имею в виду, что хочу только ссылку под категорию. Я не хочу, чтобы суб-ссылка внутри ссылки под категорией. @alexce –