如何使用python抓取HTML中元素中的所有链接?

时间:2015-03-17 02:24:38

标签: python html beautifulsoup

首先,请查看下面的图片,以便我更好地解释我的问题:

enter image description here

我正在尝试用户输入来选择“按期限搜索课程”下面的一个链接....(即2015年冬季)。

打开的HTML显示了此网页的部​​分代码。我想抓住元素中的所有href链接,它包含我想要的五个术语链接。我按照本网站的说明(www.gregreda.com/2013/03/03/web-scraping-101-with-python/),但没有解释这一部分。这是我一直在尝试的一些代码。

from bs4 import BeautifulSoup
from urllib2 import urlopen

BASE_URL = "http://classes.uoregon.edu/"

def get_category_links(section_url):

    html = urlopen(section_url).read()
    soup = BeautifulSoup(html, "lxml")
    pldefault = soup.find("td", "pldefault")
    ul_links = pldefault.find("ul")
    category_links = [BASE_URL + ul.a["href"] for i in ul_links.findAll("ul")]

    return category_links

任何帮助表示赞赏!谢谢。或者,如果您想查看该网站,请查看其classes.uoregon.edu /

1 个答案:

答案 0 :(得分:1)

我会保持简单,并找到文本中包含2015的所有链接和term中的href

for link in soup.find_all("a",
                          href=lambda href: href and "term" in href,
                          text=lambda text: text and "2015" in text):
    print link["href"]

打印:

/pls/prod/hwskdhnt.p_search?term=201402
/pls/prod/hwskdhnt.p_search?term=201403
/pls/prod/hwskdhnt.p_search?term=201404
/pls/prod/hwskdhnt.p_search?term=201406
/pls/prod/hwskdhnt.p_search?term=201407

如果您想要完整的网址,请使用urlparse.urljoin()加入带有基本网址的链接:

from urlparse import urljoin

...
for link in soup.find_all("a",
                          href=lambda href: href and "term" in href,
                          text=lambda text: text and "2015" in text):
    print urljoin(url, link["href"])

这将打印:

http://classes.uoregon.edu/pls/prod/hwskdhnt.p_search?term=201402
http://classes.uoregon.edu/pls/prod/hwskdhnt.p_search?term=201403
http://classes.uoregon.edu/pls/prod/hwskdhnt.p_search?term=201404
http://classes.uoregon.edu/pls/prod/hwskdhnt.p_search?term=201406
http://classes.uoregon.edu/pls/prod/hwskdhnt.p_search?term=201407