Изолирующий скрипт с BeautifulSoup - PullRequest
1 голос
/ 10 июля 2020

enter image description here

I have loaded the entire HTML page in BeautifulSoup.Is there a way I can isolate this collection of dictionaries?

  • The type (in yellow) appears only once in the page, there are no duplicates

This is the code I used to import the HTML file (cannot use urllib):from bs4 import BeautifulSoup

with open('/content/drive/My Drive/Colab Notebooks/Projects/20200710_StreetEasy_WebScraping/1.html') as f:
  contents = f.read()
  soup = BeautifulSoup(contents, 'lxml')
print(soup)

Searching for the a tags returns output

a = soup.find_all('a')
a
[ // cdn-assets-s3.streeteasy.com/assets/manifest-c93475b02bd2409b4a52e21af023e5d5f489f19500d234a3660fe4d35069bbac.json, https://browser.sentry-cdn.com/5.19.0/bundle.min.js, //-assets- CDN s3.streeteasy.com/assets/jquery-fe1be651ec56a9cc875a437f09db5b175cc6acf4b911bed0ef265955a099db55.js, ... 
* 1011 10 * Поиск тегов скрипта возвращает 14 * * 10 * 1012 Может я что то не так сделал при импорте документа?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Вы можете использовать аргумент string из find_all для фильтрации тегов скрипта, содержащих @context JSON

scripts = soup.find_all("script", string=re.compile("@context"))

Затем l oop через ваш scripts и загрузите JSON после удаления //<![CDATA[ и //]]

1 голос
/ 10 июля 2020

Предполагая, что вы сделали что-то вроде

soup = BeautifulSoup(html, 'lxml')

, вы можете изолировать этот конкретный элемент с помощью BeautifulSoup find() https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find

script = soup.find("script", {"type" : "application/ld+json"})
...