Мне нужна помощь в извлечении определенного фрагмента текста с веб-страницы - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь присвоить номеру 11101973 в этом html-файле переменную, но мне нужен способ получения этого числа только без какой-либо дополнительной информации:

<div class="chooseSizeContainer" id="2SizeContainer" style="display:none;">
 <div class="chooseSizeLinkContainer active">
 <a id="US-13" href="javascript:void(0);"
 class="chooseSizeLink chooseSizeLinkActive"
 data-size="13"                                                 
 onclick="ProductDetails.changeSizeAffectedLinks(
 '11101973',
 '£ 135.95',
 '£ 135.95',
 '0',
 '£ 0.00saved!',
 '13',
 '13',
 '15',
 'false',
 'false',
 'false',
 'false',
 'unknown',
 'US-',
 '555088-015');">13</a>
 </div>

Источник страницы здесь, если большеинформация необходима: view-source: https://www.kickz.com/uk/jordan-basketball-retro-air-jordan-1-retro-high-og-black_varsity_red_sail_university_blue-107840036 Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 20 января 2019

beautifulsoup - для разбора html-элемента, а не переменной javascript.Есть несколько парсеров javascript, но для простой задачи я предпочитаю Regex

import requests, re

page = requests.get(url).text
theNumber = re.search(r'collectAskInput\((\d+)).group(1)
print(theNumber)
# 11101973

поиск по номеру в

onclick="return ProductDetails.collectAskInput(11101973)
0 голосов
/ 20 января 2019

Он находится в источнике в виде тега скрипта, из которого вы можете извлечь строку в виде словаря.

import requests
import bs4
import json

url = 'https://www.kickz.com/uk/jordan-basketball-retro-air-jordan-1-retro-high-og-black_varsity_red_sail_university_blue-107840036'

response = requests.get(url)

soup = bs4.BeautifulSoup(response.text, 'html.parser')

scripts = soup.find_all('script')

jsonObj = None
for script in scripts:
    if 'ec:addProduct' in script.text:
        jsonStr = script.text

        jsonStr = jsonStr.split("ga('ec:addProduct',")[1]
        jsonStr = jsonStr.split(");")[-4]
        jsonStr = jsonStr.replace("'", '"')

        jsonObj = json.loads(jsonStr)

id_var = jsonObj['id']    
print (id_var)

Выход:

print (id_var)
107840036
...