如何在这个HTML中选择一个特定的标签?

时间:2016-07-29 16:08:39

标签: python html web-scraping beautifulsoup html-parsing

如何选择此页面中的所有标题

http://bulletin.columbia.edu/columbia-college/departments-instruction/african-american-studies/#coursestext

例如:我正试图让所有的行与此类似:

AFAS C1001 Introduction to African-American Studies. 3 points.

main_page正在迭代所有的学校课程,所以我可以抓住上面的所有标题:

http://bulletin.columbia.edu/columbia-college/departments-instruction/  

for page in main_page:
    sub_abbrev = page.find("div", {"class": "courseblock"})

我有这段代码,但我无法弄清楚如何选择第一个孩子的所有('强')标签。 使用最新的蟒蛇和美丽的汤4来刮网。 Lmk如果还有其他需要的话。 感谢

1 个答案:

答案 0 :(得分:3)

使用courseblock类迭代元素,然后,对于每个课程,获取具有courseblocktitle类的元素。使用select() and select_one() methods的工作示例:

import requests
from bs4 import BeautifulSoup


url = "http://bulletin.columbia.edu/columbia-college/departments-instruction/african-american-studies/#coursestext"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

for course in soup.select(".courseblock"):
    title = course.select_one("p.courseblocktitle").get_text(strip=True)
    print(title)

打印:

AFAS C1001 Introduction to African-American Studies.3 points.
AFAS W3030 African-American Music.3 points.
AFAS C3930 (Section 3) Topics in the Black Experience: Concepts of Race and Racism.4 points.
AFAS C3936 Black Intellectuals Seminar.4 points.
AFAS W4031 Protest Music and Popular Culture.3 points.
AFAS W4032 Image and Identity in Contemporary Advertising.4 points.
AFAS W4035 Criminal Justice and the Carceral State in the 20th Century United States.4 points.
AFAS W4037 (Section 1) Third World Studies.4 points.
AFAS W4039 Afro-Latin America.4 points.

来自@double_j的一个很好的后续问题:

  

在OPs示例中,他在点之间有一个空格。你会怎么做?这就是数据在网站上的显示方式,甚至认为它不是源代码中的。

我虽然使用了get_text() methodseparator参数,但这也会在最后一个点之前添加一个额外的空格。相反,我会通过strong加入str.join()元素文本:

for course in soup.select(".courseblock"):
    title = " ".join(strong.get_text() for strong in course.select("p.courseblocktitle > strong"))
    print(title)