首先,请查看下面的图片,以便我更好地解释我的问题:
我正在尝试用户输入来选择“按期限搜索课程”下面的一个链接....(即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 /
答案 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