我正在尝试抓取邮政编码:从div内的一部分文本中提取运输对。
我尝试使用.find来获取div,然后再次使用.find来获取其后跟的模式,以传递希望提取的文本部分。
从urllib.request 导入urlopen作为uReq
从bs4进口BeautifulSoup作为汤
汇入
导入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'})
脚本= divcontainer.find(“脚本”)。文本
模式= re.compile(r'postalToProgramIDHash \“(。*?)\”',re.MULTILINE)
zips = re.search(样式,脚本)
我要提取的脚本部分:
'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”
作为结果,我希望字典中包含邮政编码:运输键:值对。
答案 0 :(得分:0)
尝试模式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'}
答案 1 :(得分:0)
不同的方法-没有正则表达式!
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'}