【问题标题】:Scraping (BeautifulSoup) no tags刮痧 (BeautifulSoup) 无标签
【发布时间】:2017-06-26 19:43:42
【问题描述】:

我对抓取很陌生,所以据我了解,BeautifulSoup 只提取标签内的数据(使用 get、find、find_all 等函数)

我正在抓取的网站的源代码在同一个标​​签内显示各种项目

这就是源代码中“项目”的样子(所以困扰我的是这些项目只用逗号 (,) 分隔):

{
                    "id1" : "121130815",
                    "id2" : "113840",

                }

例如,我如何获得此物品?

非常感谢

【问题讨论】:

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


【解决方案1】:

正如我和其他答案所提到的,json 是处理非结构化数据的起点。

从解析你的字符串开始...

import json

json_str = """{
                    "idannonce" : "121130815",
                    "idagence" : "113840",
                    "idtiers" : "169816",
                    "typedebien" : "Appartement",
                    "typedetransaction" : ["vente"],
                    "idtypepublicationsourcecouplage" : "SL",

                    ...

                    "si_sdEau" : "0",
                    "nb_photos" : "6",
                    "prix" : "745000",
                    "surface" : "76"
                }"""

json_data = json.loads(json_str)

print(json_data)

重要的是 json.loads 函数,它完成所有繁重的工作,将您的 json 字符串解码为实际的 python 对象。

由此,我们得到一个如下所示的dict 对象:

{'si_balcon': '1', 'affichagetype': [{'name': 'list', 'value': True}], 'codepostal': '75016', 'typedetransaction': ['vente'], 'naturebien': '1', 'etage': '1', 'position': '0', 'idtypechauffage': 'central', 'idtypecuisine': 'séparée', 'nb_photos': '6', 'prix': '745000', 'nb_pieces': '3', 'idtypecommerce': '0', 'idtypepublicationsourcecouplage': 'SL', 'si_sdEau': '0', 'codeinsee': '750116', 'cp': '75016', 'nb_chambres': '2', 'idagence': '113840', 'si_sdbain': '1', 'typedebien': 'Appartement', 'idannonce': '121130815', 'produitsvisibilite': 'AD:AC:AG:BB:AW', 'surface': '76', 'idtiers': '169816'}

现在,您可以通过循环访问所有数据,如下所示:

for key in json_data:
    print(key, ':', json_data[key])

打印出来:

si_balcon : 1
affichagetype : [{'name': 'list', 'value': True}]
codepostal : 75016
typedetransaction : ['vente']
naturebien : 1

...

produitsvisibilite : AD:AC:AG:BB:AW
surface : 76
idtiers : 169816

等等。您只需执行json_data[someKey] 即可访问您想要的任何元素。

【讨论】:

  • @M.Mining 很高兴为您提供帮助。如果这个答案有帮助,请考虑阅读this。祝你有美好的一天。
【解决方案2】:

这不是 HTML,而是 JSON。 BeautifulSoup 是一个用于解析 HTML 代码的库,而不仅仅是 网页。网页可以有多种不同的格式,具体取决于您对页面的定义。

在这种情况下,您会遇到一个返回 JSON 的网站,因此您需要选择正确的工具。您需要使用 Python 内置的 JSON 库json。你可以阅读更多关于 json 模块 here.

您还应该阅读一些有关 JSON 的内容,因为您不熟悉它。 here 是对格式的一个很好的介绍。

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2020-05-13
    • 2019-04-24
    • 1970-01-01
    • 2016-01-25
    • 2013-03-15
    相关资源
    最近更新 更多