亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在將數據插入 sqlite db 之前,如何用從 selenium 抓取獲得的文本中的實際字符替換

在將數據插入 sqlite db 之前,如何用從 selenium 抓取獲得的文本中的實際字符替換

慕勒3428872 2021-10-12 10:23:17
我正在使用帶有 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&#8217;s Theory of Relativity&#58; Should We Worry&#8230;&#63;",             "series": "Science",             "long_description": "Albert Einstein does an interview with Mr&#46; John Smith about the application of the theory of relativity&#44; and what it could mean for the future of the pizza industry&#33;",             "duration": "752000",             "type": "video",             "title": "Albert Einstein&#8217;s Theory of Relativity&#58;"        },         "links": {            "permalink": "https://www.stackoverflow.com"        },         "key": "somealphanumericid"    },    ...]編輯:JSON 對象實際上是一個 JSON 對象數組,因此[]. 我正在抓取的站點是分頁的,所以我從每個頁面獲取 JSON,最后將它們連接成一個數組,以便更容易使用。您可以看到句點、逗號、冒號等字符被抓取為相應的 HTML 字符代碼?,F在,我正在遍歷 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無論如何都是類型的)。我想在數據被送入數據庫之前/當數據被送入數據庫時替換字符,但也有可能我可以在一個單獨的函數中遍歷數據庫并清理它,盡管這似乎效率低得多這樣做的方式。
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

我認為您在上面遇到的問題是您的文本已經是 unicode 格式,而您正試圖將其再次轉換為 unicode,這導致了您的錯誤。


下面的代碼對我有用,并給出了如下所示的輸出。


from bs4 import BeautifulSoup


text = "Albert Einstein&#8217;s Theory of Relativity&#58; Should We Worry&#8230;&#63;"

parsed_html = BeautifulSoup(text)


print 'Original Type: ' + type(text)

print 'Original Text: ' + text

print 'Parsed Type:   ' + type(parsed_html.text)

print 'Parsed Text:   ' + parsed_html.text

輸出:


Original Type: <type 'str'>

Original Text: Albert Einstein&#8217;s Theory of Relativity&#58; Should We Worry&#8230;&#63;

Parsed Type: <type 'unicode'>

Parsed Text: Albert Einstein’s Theory of Relativity: Should We Worry…?

使用 BeautifulSoup4 版本 4.7.1


點安裝 bs4


查看完整回答
反對 回復 2021-10-12
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

事實證明,原因HTMLEntitiesToUnicode()對我不起作用是因為我正在從 .json 文件中讀取數據,該文件已寫入但未指示應將其保存在 .json 文件中utf-8。解決這個問題,然后HTMLEntititesToUnicode()如上所述使用效果很好。


查看完整回答
反對 回復 2021-10-12
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號