【问题标题】:How to use Bs4 to scrape content that contains HTML entities如何使用 Bs4 抓取包含 HTML 实体的内容
【发布时间】:2021-01-06 13:09:51
【问题描述】:

免责声明:我对 python 还很陌生,所以我可能无法正确表达我的疑问 我正在尝试在 python 中使用 Bs4 来抓取请求响应的某个部分,我相信它是 json 格式,如图所示。 Response Headers。但是,当我打印响应的内容时,它只是打印在一个长行中,如 response content 所示,并包含诸如 " 之类的实体;和 \n,这使我无法尝试找到我需要的特定部分。如何使 \n 实际执行换行符和 "实体都转换成实际引用,以便我可以正确使用 Bs4 来抓取内容?我应该使用 Python 中的其他刮板吗?

抱歉,如果我的问题不够清楚,请告诉我如何让我的疑问更清楚。

【问题讨论】:

    标签: python json web-scraping beautifulsoup python-requests


    【解决方案1】:

    您尝试打印的数据看起来像 json 数据。您可以尝试使用具有内置 json 方法的 requests 模块。这是一个例子:

    # request the endpoint
    >>> res = requests.get('https://httpbin.org/get')
    # <Response [200]>      '200' means a successful response
    
    # use the json method so we can easily access the data
    >>> data=res.json()     
    
    # grab one of the values it contains using json/dict access notation
    >>> data['origin']
    u'99.54.....'
    

    另外,bs4 非常适合从网站上抓取 html 内容(就像您要在此处访问此页面并从该页面提取所有数据一样)。但是对于已经格式化成json的数据,就不需要使用bs4,可以使用上面requests之类的东西。解析 json 数据比解析 html/xml 数据要容易得多,所以如果数据已经采用这种格式,那么你很幸运。您也可以使用bs4 进行解析,但这不是必需的:

    import json
    data=json.loads(str(soup))
    

    【讨论】:

    • 所以我使用了json的方法。但是,所有数据都存储在一个字典标头中,我的情况是 data['content']。在该内容字典中,它包含所有其他内容行。但是,它们现在是字符串格式。我现在如何访问该字典中的每个不同标题?我尝试执行 json.load(),但它给了我错误“json.decoder.JSONDecodeError: Expecting value: line 7 column 2 (char 14)”
    • @lilexperimenter 哦,可能数据本身就是html。您需要将其解析为 bs4 方法来解析 html。
    • 啊终于!那效果很好。非常感谢你的帮助!我需要在 requests 模块上阅读更多内容……这似乎是一个我应该知道的简单问题。自己无法弄清楚这一点非常令人沮丧:/
    • @lilexperimenter 很酷,如果这是您需要的,那么您可以接受答案。如果没有,请告诉我还需要什么,我会尽力提供帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2020-07-29
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2021-12-22
    相关资源
    最近更新 更多