【问题标题】:Scraping Data using python 3.x beautiful soup and urrllib.request使用 python 3.x beautiful soup 和 urlllib.request 抓取数据
【发布时间】:2018-06-27 19:52:36
【问题描述】:

我最近刚开始使用 python,作为一个项目,我被要求学习如何从网站上抓取数据,但我很困惑,因为我对 html 更陌生,所以当我在 python 中这样做时

price_box = soup.find('div', attrs={'class':'price'})

我没有看到类名称在https://www.bloomberg.com/quote/SPX:IND 上显示为股票价格的简单“价格”。

对我来说,类的定义如下

span class="priceText__1853e8a5">2,711.66

有人可以向我解释我缺少什么或我的错误在哪里吗?

编辑:我一直在使用这个网站来提供帮助,我只是复制了代码并且它可以工作,但是当我检查元素以亲自查看时,我看不到发生了什么。

https://medium.freecodecamp.org/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe

【问题讨论】:

    标签: html python-3.x web-scraping beautifulsoup urllib


    【解决方案1】:

    您的问题的具体答案是您可以使用class_='className',而不是匹配标签divs 和类attrs。您的代码中的问题是 HTML 标记类是 'priceText__1853e8a5' 而不是 'price'

    由于您要抓取的网页内容不是静态的,而是由服务器端或客户端脚本填充,因此您必须先填充信息,然后再抓取页面。我为此使用了 Selenium,并添加了 time.sleep(5) 以等待 5 秒以加载信息。然后我使用browser.page_source 来获取页面的源代码。最后,我能够将该页面源放入soup 并在汤中找到标签以从中提取文本。

    附带说明一下,我使用find_all() 而不是find() 的原因是因为我不知道是否会有更多具有相同类的标签。

    from selenium import webdriver
    from bs4 import BeautifulSoup
    import time
    browser = webdriver.Chrome(executable_path=r"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64\\selenium\\webdriver\\chromedriver_win32\\chromedriver.exe")
    # above is my path to chromedriver, replace it with your own.
    browser.maximize_window()
    browser.get('https://www.bloomberg.com/quote/SPX:IND')
    time.sleep(5) # wait 5 seconds for the page to load the js
    pageSource = browser.page_source
    soup = BeautifulSoup(pageSource, 'html.parser')
    prices = soup.find_all(class_='priceText__1853e8a5')
    price = prices[0].text
    print(price)
    

    【讨论】:

    • 好吧,这是有道理的。我很困惑,因为它搜索价格的网站教程,它工作并提取了所有信息,但是当我查看检查元素时,它说 priceText_1853,,而不是价格
    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2023-03-31
    • 2013-01-09
    • 1970-01-01
    • 2020-04-22
    • 2017-08-14
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多