仅选择dl-dd标签结构中的链接

时间:2015-01-16 11:30:36

标签: python beautifulsoup

Fashiontrends.pk <dl class="boccat">包含所有链接。我们想要编写一些代码来查找该部分,然后获取该部分<dd>元素中的所有链接。

from bs4 import BeautifulSoup
from urllib2 import urlopen

BASE_URL = "http://www.fashiontrends.pk"

def get_category_links(section_url):
    html = urlopen(section_url).read()
    soup = BeautifulSoup(html, "lxml")
    boccat = soup.find("dl", "boccat")
    category_links = [BASE_URL + dd.a["href"] for dd in boccat.findAll("dd")]
    return category_links

1 个答案:

答案 0 :(得分:0)

使用CSS selector限制搜索:

links = soup.select('dl.boccat dd a[href]')

只会找到href属性的链接对象,该属性位于dd标记下的dl标记下boccat类。

如果(某些)您的网址是相对的,您可以在此处使用urlparse.urljoin()

from urlparse import urljoin

def get_category_links(section_url):
    response = urlopen(section_url)
    soup = BeautifulSoup(response, "lxml")
    return [urljoin(BASE_URL, link["href"])
            for link in soup.select('dl.boccat dd a[href]')]

无需在响应对象上调用.read(); BeautifulSoup()会为您拨打电话。

但是,您提供给我们的特定网址在投放的HTML中没有<dl class="boccat">个元素,无论是浏览器还是urllib2

>>> from urllib2 import urlopen
>>> source = urlopen('http://www.fashiontrends.pk').read()
>>> '<dl' in source
False

页面中没有<dl>个标记,完全停止。您没有向我们展示任何代码,表明您 加载的页面。