美搜网刮,无效果

2024-06-02 05:13:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从https://hk.appledaily.com/search/apple搜集新闻信息。 我需要从div class="flex-feature"获取新闻内容,但它只返回[]。希望有人能帮忙,谢谢

from bs4 import BeautifulSoup
import requests


page = requests.get("https://hk.appledaily.com/search/apple")

soup = BeautifulSoup(page.content, 'lxml')

results = soup.find_all('div', class_ = "flex-feature")


print(results)

Tags: httpsimportdivcomapplesearchpagerequests
2条回答

该页面上的数据是动态获取和呈现的(通过js)。因此,除非评估javascript,否则无法获取数据

刮取数据的一种方法是使用无头浏览器。
下面是一个使用pyppeteer的示例

import asyncio
from pyppeteer import launch

# https://pypi.org/project/pyppeteer/

URL = 'https://hk.appledaily.com/search/apple'

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto(URL)

    await page.waitForSelector(".flex-feature")

    elements = await page.querySelectorAll('.flex-feature')
    
    for el in elements:
        text = await page.evaluate('(el) => el.textContent', el)
        print(text)


    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

输出:

3小時前特朗普確診 不斷更新 特朗普新聞秘書及多名白宮職員確診 「白宮群組」持續擴大特朗普確診 不斷更新

 ... REDUCTED ...

如果您在浏览器中查看页面源代码,您将看到flex-feature在HTML中不存在。这是服务器在呈现JavaScript和所有动态内容之前最初发回的HTML。这也是requests.get将提供给您的相同HTML([])

要访问这些元素,您可能需要使用Selenium之类的东西,这将允许您自动化浏览器并呈现动态加载页面的JavaScript。请查看我对类似问题的回答here,以获得一些见解

其他资源

相关问题 更多 >