如何使用 python 获取 HTML 中某个元素内的所有链接?
How do I grab all the links within an element in HTML using python?
首先,请查看下图,以便我更好地解释我的问题:
我正在尝试将用户输入 select 下面的链接之一 "Course Search By Term"...(即 2015 年冬季)。
打开的HTML显示了该网页的部分代码。我想抓取 element 中的所有 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/
我会保持简单,并在文本中找到包含 2015
并在 href
中包含 term
的所有链接:
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
如果您想要完整的 URL,请使用 urlparse.urljoin()
将链接与基础 url:
连接起来
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
首先,请查看下图,以便我更好地解释我的问题:
我正在尝试将用户输入 select 下面的链接之一 "Course Search By Term"...(即 2015 年冬季)。
打开的HTML显示了该网页的部分代码。我想抓取 element 中的所有 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/
我会保持简单,并在文本中找到包含 2015
并在 href
中包含 term
的所有链接:
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
如果您想要完整的 URL,请使用 urlparse.urljoin()
将链接与基础 url:
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