【问题标题】:Selecting only links in a dl - dd tag structure仅选择 dl - dd 标记结构中的链接
【发布时间】:2015-03-15 00:03:30
【问题描述】:

对于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

【问题讨论】:

  • 是的,您需要什么帮助?
  • 该页面中没有 DL 标签..

标签: python beautifulsoup


【解决方案1】:

使用CSS selector 限制您的搜索:

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

将仅找到具有href 属性的链接对象,位于dl 标记下的dd 标记下,具有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() 会为你打电话。

但是,您提供给我们的特定 URL 在提供给浏览器或urllib2 的 HTML 中没有 <dl class="boccat"> 元素:

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

页面中没有&lt;dl&gt; 标签,句号。您没有向我们展示任何代码来表明您正在加载哪个页面。

【讨论】:

    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2014-08-16
    • 2011-11-27
    相关资源
    最近更新 更多