使用砒霜庫來抓取網頁,然后用beautifulsoup來決議頁面源。Soup包含了一個有很多腳本的大型html。我需要-9的結尾。
page_source = await session.get_page_source()
soup = bs(page_source, 'html.parser')
scripts = soup.find_all('script')
script9 = scripts[-9].next。
這里是script9:
sometext;
var thumbdata = {
thumbs: [{avatar: "/i/nophoto.jpg"/span>, username: "IslandGirlSearching",la:"0 second", chatid: "0",userid: "2088789", age:"21", city:"Cebu"},{avatar: "/p/2021-08/Cristina266/ava-1629535964.jpg", username: "Cristina266",la:"0秒", chatid: "0",userid: "2095868", age:"26", city:"Pasig City"}。 ] };
var source = sometext;
然后我按照你分享的例子:
pattern = re.compile(r "var thumbdata = {
"
r"(.*?);")
m = pattern.match(script9.string)
thumbs = json.load(m.group()[0])
for thumb in thumbs:
print(thumb)
檢查了我的詞組,它是正確的。但當我執行這段代碼時,我得到了屬性錯誤:
AttributeError: 'NoneType' object沒有屬性'group'。
uj5u.com熱心網友回復:
你的方法仍然有幾個問題:
要向json.load()傳遞一個字串,它需要是有效的JSON;否則,你會得到例外。對于你試圖捕獲的東西,你需要包括前面的{標記作為你的捕獲組的一部分。將你的兩個獨立模式合并為:
var thumbdata = ({
.*?);
你會注意到,即使有這個變化,以抓住前面的大括號標記,你提取的字串仍然不是有效的JSON。雖然不是普通的JavaScript物件的情況,但所有的鍵名都必須用引號來封裝;而你要提取的文本在前面沒有這樣做。因此,您需要將內置的 JSON 決議器(它嚴格遵守規范,并且不將此資料作為 JSON 進行決議)換成hjson這樣的東西,它沒有實作具有這種限制的規范。
re.match()的行為并不像你認為的那樣。深入研究這個方法的檔案,在這個特定的情況下是有啟發的(強調是我的):
注意,即使在MULTILINE模式下,re.match()也只能在字串的開頭匹配,而不是在每一行的開頭。
這一點很重要,因為script9中的字串資料并不以任何被認為是 "匹配 "的模式的資料開始。相反,將re.match()的呼叫換成re.search()代替。
針對上述變化再做一些調整,你的代碼將看起來更像以下內容:
import re
import hjson
script9 = '' sometext;
var thumbdata = {
thumbs: [{avatar:"/i/nophoto.jpg", username: "IslandGirlSearching",la: "0 second",chatid: "0",userid: "2088789", age: "21",city: "Cebu"},{avatar:"/p/2021-08/Cristina266/ava-1629535964.jpg", username: "Cristina266",la: "0 second",chatid: "0",userid: "2095868", age: "26", city: "Pasig City"}. ] };
var source = sometext;
''/span>
pattern = re.compile(r "var thumbdata = ({.
.*?);")
m = pattern.search(script9)
thumbs = list(hjson.load(m.group()[0]).items()
print(thumbs)
輸出:
[('thumbs', [OrderedDict([('avatar', '/i/nophoto.jpg'), () jpg'), ('username', 'IslandGirlSearching'), ('la', '0 second '), ('chatid', '0'), ('userid', '2088789'), ('年齡', '21'), ('城市', 'Cebu')]), OrderedDict([('avatar', '/p/2021-08/Cristina266/ava-1629535964. jpg'), ('用戶名', 'Cristina266'), ('la', '0 second '), ('chatid', '0') 。('userid', '2095868'), ('age', '26'), ('city', 'Pasig City') ]) ]]
('thumbs', [OrderedDict([('avatar', '/i/nophoto. jpg'), ('username', 'IslandGirlSearching'), ('la', '0 second '), ('chatid', '0'), ('userid', '2088789'), ('年齡', '21'), ('城市', 'Cebu')]), OrderedDict([('avatar', '/p/2021-08/Cristina266/ava-1629535964. jpg'), ('用戶名', 'Cristina266'), ('la', '0 second '), ('chatid', '0') 。('userid', '2095868'), ('age', '26'), ('city', 'Pasig City') ])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314877.html
標籤:
