【问题标题】:Could not find a class name for BeautifulSoup on the website to crawl on在要抓取的网站上找不到 BeautifulSoup 的类名
【发布时间】:2020-06-11 19:45:56
【问题描述】:

我是 Beautiful Soup 的新手。

我正在尝试在以下链接中获取“排名标准”​​类。 不幸的是,我使用“标准”作为 soup_findAll() 的类, 但它在那里没有显示任何内容。 我找不到任何其他可以给我想要的数据的类名 (综合得分、学术声誉等)

我实际上想为多所大学做网络爬虫, 所以我希望使用我可以为各种大学格式化的 URL(只需更改大学名称)。 否则,我将只使用outerHTML(经过测试并且有效,但我不知道 如何为多所大学定制)

我的代码如下。我最终使用了 get_text():

r = requests.get("https://www.topuniversities.com/universities/california-institute-technology-caltech")
html = r.text
soup = BeautifulSoup(html, 'html.parser')
tds = soup.get_text()

print(tds)

它并不成功,因为它有太多的东西让我很难评估我想要的信息。

任何帮助将不胜感激!谢谢!

The link I am trying to scrape:

【问题讨论】:

    标签: python-3.x beautifulsoup


    【解决方案1】:

    数据通过 JavaScript Ajax 请求动态加载。但是你可以使用requests 模块来模拟它。

    例如:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://www.topuniversities.com/universities/california-institute-technology-caltech'
    
    soup = BeautifulSoup( requests.get(url).content, 'html.parser' )
    ajax_url = 'https://www.topuniversities.com' + soup.select_one('a.use-ajax')['href'].replace('nojs', 'ajax')
    data = requests.post(ajax_url).json()
    
    for d in data:
        if 'data' in d:
            soup = BeautifulSoup(d['data'], 'html.parser')
            break
    
    for div in soup.select('div.criteria'):
        criteria = div.find(text=True).strip()
        ranking = div.b.get_text(strip=True)
        print('{:<30} {}'.format(criteria, ranking))
    

    打印:

    Overall Score:                 97
    Academic Reputation:           97
    Employer Reputation:           82.8
    Faculty Student:               100
    Citations per Faculty:         99.9
    International Faculty:         100
    International Students:        88.2
    

    【讨论】:

    • 非常感谢!这很有帮助!对不起,我纠正了我的几个错别字。我早上 5 点起床,一直工作到下午 4 点。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多