我正在使用带有 Python 2.7 的 Selenium (Chromedriver) 来抓取网站以获取一些显示在标签中的动态文本。里面是嵌套在 JSON 对象中的 HTML 代码,用于在我正在查看的页面上创建内容列表,但我只对获取文本内容感兴趣。我能够弄清楚如何使用 清除 HTML 标签re,但文本仍然包含特殊字符的 HTML 字符代码,我想用它们对应的字符替换。
因此,例如,假设我的 json(在清除 HTML 标签后)如下:
[
{
"data": {
"published_on": "2019-01-15T08:46:00+00:00",
"id": "somealphanumericid",
"short_description": "Albert Einstein’s Theory of Relativity: Should We Worry…?",
"series": "Science",
"long_description": "Albert Einstein does an interview with Mr. John Smith about the application of the theory of relativity, and what it could mean for the future of the pizza industry!",
"duration": "752000",
"type": "video",
"title": "Albert Einstein’s Theory of Relativity:"
},
"links": {
"permalink": "https://www.stackoverflow.com"
},
"key": "somealphanumericid"
},
...
]
编辑:JSON 对象实际上是一个 JSON 对象数组,因此[]. 我正在抓取的站点是分页的,所以我从每个页面获取 JSON,最后将它们连接成一个数组,以便更容易使用。
您可以看到句点、逗号、冒号等字符被抓取为相应的 HTML 字符代码。
现在,我正在遍历 JSON 并将所有内容放入 sqlite 数据库中,因此我是否替换 JSON 本身中的字符代码,或者是否在将数据推送到数据库之前进行替换都没有关系。
我尝试做的第一件事是使用辅助函数,该函数将字符串作为参数并返回替换了字符的字符串。我基本上修改了可以在这里找到的解决方案。所以这个函数是:
但是,这导致解析时出现以下错误HTMLEntitiesToUnicode(data[i]['data']['series']):
File "BeautifulSoup.py", line 1918, in _detectEncoding
'^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data)
TypeError: expected string or buffer
我不明白为什么 BeautifulSoup 没有将其视为字符串,但我尝试将其修改为:
HTMLEntitiesToUnicode(str(data[i]['data']['series']))
然后给了我错误:
File "support.py", line 162, in json_to_rows
HTMLEntitiesToUnicode(str(data[i]['data']['series'])),
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 129: ordinal not in range(128)
添加.encode('utf-8')也没有解决错误(在具有相同错误消息的各种其他帖子中推荐这样做)。
我的最终目标只是将所有这些信息刮到一个 db 中,使其格式化为正常的清晰文本(除了持续时间,INTEGER无论如何都是类型的)。
我想在数据被送入数据库之前/当数据被送入数据库时替换字符,但也有可能我可以在一个单独的函数中遍历数据库并清理它,尽管这似乎效率低得多这样做的方式。
泛舟湖上清波郎朗
慕田峪4524236
相关分类