Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在BeautifulSoup中使用dicts解析脚本标记_Python_Python 3.x_Beautifulsoup_Tags - Fatal编程技术网

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)