Python 在BeautifulSoup中使用dicts解析脚本标记
在对这个问题进行部分回答时,我遇到了一个Python 在BeautifulSoup中使用dicts解析脚本标记,python,python-3.x,beautifulsoup,tags,Python,Python 3.x,Beautifulsoup,Tags,在对这个问题进行部分回答时,我遇到了一个bs4.element.Tag,它是一堆嵌套的命令和列表(s,如下) 有没有一种方法可以返回s中包含的URL列表而不使用re.find_all?关于此标记结构的其他注释也很有用 from bs4 import BeautifulSoup import requests link = 'https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab&sort=p' r = requests.g
bs4.element.Tag
,它是一堆嵌套的命令和列表(s
,如下)
有没有一种方法可以返回s
中包含的URL列表而不使用re.find_all
?关于此标记结构的其他注释也很有用
from bs4 import BeautifulSoup
import requests
link = 'https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab&sort=p'
r = requests.get(link)
soup = BeautifulSoup(r.text, 'html.parser')
s = soup.find('script', type='application/ld+json')
## the first bit of s:
# s
# Out[116]:
# <script type="application/ld+json">
# {"@context":"http://schema.org","@type":"ItemList","numberOfItems":50,
从bs4导入美化组
导入请求
链接https://stackoverflow.com/jobs?med=site-ui&ref=作业选项卡&sort=p'
r=请求。获取(链接)
soup=BeautifulSoup(r.text'html.parser')
s=soup.find('script',type='application/ld+json')
##s的第一位:
#
#出[116]:
#
#{@context”:http://schema.org“,“@type”:“ItemList”,“numberOfItems”:50,
我所尝试的:
- 通过
上的制表符完成功能,随机浏览各种方法s
- 挑选合适的人选
我的问题是
s
只有一个属性(type
),并且似乎没有任何子标记。您可以使用s.text
获取脚本的内容。它是JSON,因此您可以用JSON.loads
解析它。从那里,可以简单地访问字典:
import json
from bs4 import BeautifulSoup
import requests
link = 'https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab&sort=p'
r = requests.get(link)
soup = BeautifulSoup(r.text, 'html.parser')
s = soup.find('script', type='application/ld+json')
urls = [el['url'] for el in json.loads(s.text)['itemListElement']]
print(urls)
更简单:
from bs4 import BeautifulSoup
import requests
link = 'https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab&sort=p'
r = requests.get(link)
soup = BeautifulSoup(r.text, 'html.parser')
s = soup.find('script', type='application/ld+json')
# JUST THIS
json = json.loads(s.string)