Получить данные переменных внутри тега скрипта в Python или Content, добавленные из js

Я хочу получить данные из другого URL- адреса, для которого я использую urllib и Beautiful Soup. Мои данные находятся внутри тега таблицы (который я выяснил с помощью консоли Firefox). Но когда я попытался получить таблицу, используя свой id, результат будет равен None. Тогда я думаю, что эта таблица должна динамически добавляться через некоторый код js.

Я пробовал все «lxml», «html5lib» парсеров, но все же я не могу получить данные таблицы.

Я также пробовал еще одну вещь:

web = urllib.urlopen("my url") html = web.read() soup = BeautifulSoup(html, 'lxml') js = soup.find("script") ss = js.prettify() print ss 

Результат:

 <script type="text/javascript"> myPage = 'ETFs'; sectionId = 'liQuotes'; //section tab breadCrumbId = 'qQuotes'; //page is_dartSite = "quotes"; is_dartZone = "news"; propVar = "ETFs"; </script> 

Но теперь я не знаю, как я могу получить данные этих переменных js.

Теперь у меня есть два варианта: получить этот контент таблицы или получить переменные js, любой из них может выполнить мою задачу, но, к сожалению, я не знаю, как их получить. Поэтому, пожалуйста, расскажите, как я могу решить любую проблему ,

благодаря

2 Solutions collect form web for “Получить данные переменных внутри тега скрипта в Python или Content, добавленные из js”

РЕДАКТИРОВАТЬ

Это сделает трюк, используя re- модуль, чтобы извлечь данные и загрузить их как JSON:

 import urllib import json import re from bs4 import BeautifulSoup web = urllib.urlopen("http://www.nasdaq.com/quotes/nasdaq-financial-100-stocks.aspx") soup = BeautifulSoup(web.read(), 'lxml') data = soup.find_all("script")[19].string p = re.compile('var table_body = (.*?);') m = p.match(data) stocks = json.loads(m.groups()[0]) >>> for stock in stocks: ... print stock ... [u'ASPS', u'Altisource Portfolio Solutions SA', 116.96, 2.2, 1.92, 86635, u'N', u'N'] [u'AGNC', u'American Capital Agency Corp.', 23.76, 0.13, 0.55, 3184303, u'N', u'N'] . . . [u'ZION', u'Zions Bancorporation', 29.79, 0.46, 1.57, 2154017, u'N', u'N'] 

Проблема заключается в том, что смещение тега сценария жестко закодировано, и нет надежного способа найти его на странице. Изменения на странице могут привести к повреждению вашего кода.

ОРИГИНАЛЬНЫЙ ответ

Вместо того, чтобы пытаться очистить данные, вы можете загрузить CSV-представление тех же данных из http://www.nasdaq.com/quotes/nasdaq-100-stocks.aspx?render=download .

Затем используйте модуль csv Python для его анализа и обработки. Это не только более удобно, но и будет более гибким решением, поскольку любые изменения в HTML могут легко нарушить ваш код очистки экрана.

В противном случае, если вы посмотрите на фактический HTML, вы обнаружите, что данные доступны на странице в следующем теге скрипта:

 <script type="text/javascript">var table_body = [["ATVI", "Activision Blizzard, Inc", 20.92, 0.21, 1.01, 6182877, .1, "N", "N"], ["ADBE", "Adobe Systems Incorporated", 66.91, 1.44, 2.2, 3629837, .6, "N", "N"], ["AKAM", "Akamai Technologies, Inc.", 57.47, 1.57, 2.81, 2697834, .3, "N", "N"], ["ALXN", "Alexion Pharmaceuticals, Inc.", 170.2, 0.7, 0.41, 659817, .1, "N", "N"], ["ALTR", "Altera Corporation", 33.82, -0.06, -0.18, 1928706, .0, "N", "N"], ["AMZN", "Amazon.com, Inc.", 329.67, 6.1, 1.89, 5246300, 2.5, "N", "N"], .... ["YHOO", "Yahoo! Inc.", 35.92, 0.98, 2.8, 18705720, .9, "N", "N"]]; 

Чтобы добавить к ответу @mhawke, вместо того, чтобы жестко скопировать смещение тега скрипта, вы просматриваете все теги скрипта и сопоставляете те, которые соответствуют вашему шаблону;

 web = urllib.urlopen("http://www.nasdaq.com/quotes/nasdaq-financial-100-stocks.aspx") pattern = re.compile('var table_body = (.*?);') soup = BeautifulSoup(web.read(), "lxml") scripts = soup.find_all('script') for script in scripts: if(pattern.match(str(script.string))): data = pattern.match(script.string) stock = json.loads(data.groups()[0]) print stock 
  • Как я могу повторно использовать метод синтаксического анализа моего паук-паука в наследовании CrawlSpider?
  • Как установить portia, приложение python из Github (Mac)
  • Selenium Не удается найти элемент (Python) WebScraping
  • селен с scrapy для динамической страницы
  • Скремблирование веб-контента с использованием xpath не будет работать
  • Как я могу получить весь текст с сайта Scrapy?
  • Запись всех кликов и взаимодействий на моем веб-сайте
  • Scrapy получает href из div
  • Python - лучший язык программирования в мире.