如何在<script>

2024-04-20 15:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想刮拉链代码:装运对从div中的一部分文本

我试过使用。find获取div,然后。find again获取div,后跟一个模式,以传递我希望从中开始提取的文本部分。你知道吗

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import re
import json

my_url = 'https://www.amazon.com/Prime-FREE-Same-Day-Delivery/b?ie=UTF8&node=8729023011'

divcontainer = page_soup.find('div', attrs={'id' : 'top'})

script = divcontainer.find("script").text

pattern = re.compile(r'postalToProgramIDHash \"(.*?)\"', re.MULTILINE)

zips = re.search(pattern, script)

我要提取的脚本部分:

 'postalToProgramIdHash':  {"94087":"free_same_day","11412":"free_same_day","93227":"free_same_day","75227":"free_same_day"..."84130":"free_same_day","40233":"free_same_day","27717":"free_same_day","45202":"free_same_day"},
    'marketplaceId'

我想要一本带拉链的字典代码:装运密钥:结果是值对。你知道吗


Tags: 代码from文本importdivrefreeas
2条回答

不同的方法-没有正则表达式!你知道吗

to_dict = script.replace('{','}').replace('"','').split('}')
final = dict(item.split(":") for item in to_dict[1].split(","))
print(final)

输出:

{'94087': 'free_same_day', '11412': 'free_same_day', '93227': 'free_same_day', '75227': 'free_same_day', ' 84130': 'free_same_day', '40233': 'free_same_day', '27717': 'free_same_day','45202': 'free_same_day'}

尝试模式re.compile(r"'postalToProgramIdHash':\s*({.*?})", flags=re.MULTILINE)

例如:

import re
import json

script = """'postalToProgramIdHash':  {"94087":"free_same_day","11412":"free_same_day","93227":"free_same_day","75227":"free_same_day", "84130":"free_same_day","40233":"free_same_day","27717":"free_same_day","45202":"free_same_day"},
    'marketplaceId'"""

pattern = re.compile(r"'postalToProgramIdHash':\s*({.*?})", flags=re.MULTILINE)

zips = re.search(pattern, script)
print(json.loads(zips.group(1)))

输出:

{u'11412': u'free_same_day',
 u'27717': u'free_same_day',
 u'40233': u'free_same_day',
 u'45202': u'free_same_day',
 u'75227': u'free_same_day',
 u'84130': u'free_same_day',
 u'93227': u'free_same_day',
 u'94087': u'free_same_day'}

相关问题 更多 >