Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save HyeongWookKim/3d5f24967bacbeeefb5330a4dae365f9 to your computer and use it in GitHub Desktop.
Save HyeongWookKim/3d5f24967bacbeeefb5330a4dae365f9 to your computer and use it in GitHub Desktop.
[Ch 3-1. 시카고 샌드위치 맛집 분석] from "파이썬으로 데이터 주무르기(민형기 지음)"
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3-1장. 시카고 샌드위치 맛집 분석\n",
"<분석 목적>\n",
"- 인터넷에서 직접 \"웹 스크래핑\"한 데이터를 사용하여, 시카고 샌드위치 맛집 리스트를 정리해보려 한다\n",
" - 시카고 샌드위치 맛집 리스트를 정리하는데 그치지 않고, 나아가 지도에 각 맛집을 표기해보는 작업까지 수행해 줄 것이다!\n",
"- 인터넷에서 웹 페이지의 내용을 가져오는 ```BeautifulSoup```이라는 모듈을 사용할 것이다\n",
"\n",
"<시카고 매거진 홈페이지 설명>\n",
"- 시카고의 베스트 샌드위치 가게를 소개하고 있는 \"시카고 매거진 홈페이지\"에서 정보를 가져올 것이다\n",
" - https://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\n",
"- 홈페이지를 살펴보면, *메뉴의 이름* 과 *가게의 이름* 이 나와있다\n",
"- *Read More* 이라는 부분을 클릭하면, 시카고 매거진에서 각 가게를 리뷰한 페이지로 넘어가진다"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [참고] Beautiful Soup 기초\n",
"- 시카고 샌드위치 맛집 분석에 앞서, ```BeautifulSoup```에 대해 간단히 학습하는 시간을 가져보려 한다\n",
"- ```BeautifulSoup```는 HTML과 XML 파일에서 데이터를 읽어내는 파이썬 라이브러리이다\n",
"- 웹 데이터를 가져오는 ```BeautifulSoup``` 모듈 기초를 간단한 실습을 통해 배워보고자 한다\n",
" - 실습에 사용한 html 파일: \"03. test_first.html\"\n",
" \n",
"<참고>\n",
"- HTML 기초 지식 참고 사이트: http://webberstudy.com/html-css/html-1/basic-knowledge/"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.480710Z",
"start_time": "2020-05-28T00:14:23.286227Z"
}
},
"outputs": [],
"source": [
"from bs4 import BeautifulSoup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**다운받은 html 파일 읽어오기**\n",
"- ```open``` 명령에 읽기 옵션('r')을 주고 읽어오면 된다\n",
"- 읽은 tml 페이지의 내용을 전체 다 보고 싶은 경우, 아래와 같이 ```prettify()```라는 옵션을 사용하면 들여쓰기까지 되서 보기 좋게 불러와준다\n",
" - ```prettify()```는 BeautifulSoup에서 parsing 처리한 parser 트리를 유니코드 형태로 리턴해주는 함수"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.493639Z",
"start_time": "2020-05-28T00:14:23.483666Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<!DOCTYPE html>\n",
"<html>\n",
" <head>\n",
" <title>\n",
" Very Simple HTML Code by PinkWink\n",
" </title>\n",
" </head>\n",
" <body>\n",
" <div>\n",
" <p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">\n",
" PinkWink\n",
" </a>\n",
" </p>\n",
" <p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">\n",
" Python\n",
" </a>\n",
" </p>\n",
" </div>\n",
" <p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>\n",
" </body>\n",
"</html>\n"
]
}
],
"source": [
"page = open(\"../data/03. test_first.html\", 'r').read()\n",
"soup = BeautifulSoup(page, 'html.parser')\n",
"print(soup.prettify())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**soup이라는 변수에서 한 단계 아래에서 포함된 태그들을 알고 싶은 경우, ```children```속성을 사용**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.511591Z",
"start_time": "2020-05-28T00:14:23.496632Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['html',\n",
" '\\n',\n",
" <html>\n",
" <head>\n",
" <title>Very Simple HTML Code by PinkWink</title>\n",
" </head>\n",
" <body>\n",
" <div>\n",
" <p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
" </p>\n",
" <p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
" </p>\n",
" </div>\n",
" <p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>\n",
" </body>\n",
" </html>]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(soup.children)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**soup는 문서 전체를 저장한 변수. 때문에 그 안에서 html 태그에 접속하고 싶으면 다음과 같이 접근!**"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.527549Z",
"start_time": "2020-05-28T00:14:23.515580Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<html>\n",
"<head>\n",
"<title>Very Simple HTML Code by PinkWink</title>\n",
"</head>\n",
"<body>\n",
"<div>\n",
"<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
"</p>\n",
"<p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
"</p>\n",
"</div>\n",
"<p class=\"outer-text first-item\" id=\"second\">\n",
"<b>\n",
" Data Science is funny.\n",
" </b>\n",
"</p>\n",
"<p class=\"outer-text\">\n",
"<b>\n",
" All I need is Love.\n",
" </b>\n",
"</p>\n",
"</body>\n",
"</html>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"html = list(soup.children)[2]\n",
"html"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.538520Z",
"start_time": "2020-05-28T00:14:23.529544Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['\\n',\n",
" <head>\n",
" <title>Very Simple HTML Code by PinkWink</title>\n",
" </head>,\n",
" '\\n',\n",
" <body>\n",
" <div>\n",
" <p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
" </p>\n",
" <p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
" </p>\n",
" </div>\n",
" <p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>\n",
" </body>,\n",
" '\\n']"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(html.children)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**본문으로 흔히 보게 되는 부분인 body 태그의 내용**\n",
"- 이와 같이 children과 parent를 이용해서 태그를 조사할 수 있다"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.550488Z",
"start_time": "2020-05-28T00:14:23.541511Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<body>\n",
"<div>\n",
"<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
"</p>\n",
"<p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
"</p>\n",
"</div>\n",
"<p class=\"outer-text first-item\" id=\"second\">\n",
"<b>\n",
" Data Science is funny.\n",
" </b>\n",
"</p>\n",
"<p class=\"outer-text\">\n",
"<b>\n",
" All I need is Love.\n",
" </b>\n",
"</p>\n",
"</body>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"body = list(html.children)[3]\n",
"body"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 아래처럼 한 번에 바로 찾을 수도 있다"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.562455Z",
"start_time": "2020-05-28T00:14:23.552482Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<body>\n",
"<div>\n",
"<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
"</p>\n",
"<p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
"</p>\n",
"</div>\n",
"<p class=\"outer-text first-item\" id=\"second\">\n",
"<b>\n",
" Data Science is funny.\n",
" </b>\n",
"</p>\n",
"<p class=\"outer-text\">\n",
"<b>\n",
" All I need is Love.\n",
" </b>\n",
"</p>\n",
"</body>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.body"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.573426Z",
"start_time": "2020-05-28T00:14:23.567443Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"['\\n',\n",
" <div>\n",
" <p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
" </p>\n",
" <p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
" </p>\n",
" </div>,\n",
" '\\n',\n",
" <p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>,\n",
" '\\n',\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>,\n",
" '\\n']"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(body.children)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.582402Z",
"start_time": "2020-05-28T00:14:23.576418Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"7"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(list(body.children))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**body 태그 안에 children의 리스트를 확인**\n",
"- 앞서 수행한 코드처럼 단계별로 접근하고, 다시 그 구조를 코드 속에 담아두는 것은 체계적으로 생각하고 접근할 수 있는 장점이 있다\n",
"- 그러나 복잡하고 큰 크기의 페이지를 접근하기에는 어려움이 있다\n",
"- 만약 접근해야 할 태그를 알고있다면, ```find```나 ```find_all```명령을 많이 사용한다"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 모든 p 태그를 찾기"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.592377Z",
"start_time": "2020-05-28T00:14:23.585394Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
" </p>,\n",
" <p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
" </p>,\n",
" <p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>,\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.find_all('p')"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-27T01:24:30.502798Z",
"start_time": "2020-05-27T01:24:30.497811Z"
}
},
"source": [
"- 제일 첫 번째 p 태그 찾기"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.603346Z",
"start_time": "2020-05-28T00:14:23.595367Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>,\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.find_all('p', class_ = 'outer-text')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- p 태그의 class가 outer-text인 것 찾기"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.613321Z",
"start_time": "2020-05-28T00:14:23.606339Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<p class=\"outer-text first-item\" id=\"second\">\n",
" <b>\n",
" Data Science is funny.\n",
" </b>\n",
" </p>,\n",
" <p class=\"outer-text\">\n",
" <b>\n",
" All I need is Love.\n",
" </b>\n",
" </p>]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.find_all(class_ = 'outer-text')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- class 이름으로만 outer-text 찾기"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.623293Z",
"start_time": "2020-05-28T00:14:23.616313Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
" </p>]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.find_all(id = \"first\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- id가 first인 태그들 찾기"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.633268Z",
"start_time": "2020-05-28T00:14:23.626285Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
"</p>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.find('p')"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-27T01:42:24.931035Z",
"start_time": "2020-05-27T01:42:24.924053Z"
}
},
"source": [
"**```find``` 명령은 제일 처음 나타난 태그만 찾아준다**\n",
"\n",
"**따라서 그 다음 태그만 찾고 싶은 경우에는 다른 방법이 필요하다**"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.643239Z",
"start_time": "2020-05-28T00:14:23.636259Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<head>\n",
"<title>Very Simple HTML Code by PinkWink</title>\n",
"</head>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.head"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- soup의 head 다음에 줄바꿈 문자(\\n)가 있다"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.652216Z",
"start_time": "2020-05-28T00:14:23.645234Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n'"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.head.next_sibling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- soup의 head 앞에 줄바꿈 문자(\\n)가 있다"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.661191Z",
"start_time": "2020-05-28T00:14:23.654210Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.head.previous_sibling"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.675153Z",
"start_time": "2020-05-28T00:14:23.664183Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<body>\n",
"<div>\n",
"<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
"</p>\n",
"<p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
"</p>\n",
"</div>\n",
"<p class=\"outer-text first-item\" id=\"second\">\n",
"<b>\n",
" Data Science is funny.\n",
" </b>\n",
"</p>\n",
"<p class=\"outer-text\">\n",
"<b>\n",
" All I need is Love.\n",
" </b>\n",
"</p>\n",
"</body>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.head.next_sibling.next_sibling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- head와 같은 위치에 있던 body 태그로 접근"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.685127Z",
"start_time": "2020-05-28T00:14:23.678146Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<p class=\"inner-text first-item\" id=\"first\">\n",
" Happy PinkWink.\n",
" <a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>\n",
"</p>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"body.p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- ```next_sibling```을 두 번 걸면, 그 다음 p 태그로 이동할 수 있다"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.695100Z",
"start_time": "2020-05-28T00:14:23.687123Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<p class=\"inner-text second-item\">\n",
" Happy Data Science.\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>\n",
"</p>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"body.p.next_sibling.next_sibling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**```get_text()```명령으로 태그 안에 있는 텍스트만 가지고 올 수 있다**"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.703080Z",
"start_time": "2020-05-28T00:14:23.698093Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" Happy PinkWink.\n",
" PinkWink\n",
"\n",
"\n",
" Happy Data Science.\n",
" Python\n",
"\n",
"\n",
"\n",
" Data Science is funny.\n",
" \n",
"\n",
"\n",
"\n",
" All I need is Love.\n",
" \n",
"\n"
]
}
],
"source": [
"for each_tag in soup.find_all('p'):\n",
" print(each_tag.get_text())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- body 전체에서 ```get_text()```를 하면, 태그가 있던 자리는 줄바꿈(\\n)이 표시되고 전체 텍스트를 보여준다"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.712055Z",
"start_time": "2020-05-28T00:14:23.705073Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n\\n\\n Happy PinkWink.\\n PinkWink\\n\\n\\n Happy Data Science.\\n Python\\n\\n\\n\\n\\n Data Science is funny.\\n \\n\\n\\n\\n All I need is Love.\\n \\n\\n'"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"body.get_text()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**클릭 가능한 링크를 의미하는 a 태그 찾기**"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.729009Z",
"start_time": "2020-05-28T00:14:23.720033Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<a href=\"http://www.pinkwink.kr\" id=\"pw-link\">PinkWink</a>,\n",
" <a href=\"https://www.python.org\" id=\"py-link\">Python</a>]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"links = soup.find_all('a')\n",
"links"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- ```href``` 속성을 찾으면 링크 주소를 얻을 수 있다"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.740978Z",
"start_time": "2020-05-28T00:14:23.733998Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PinkWink -> http://www.pinkwink.kr\n",
"Python -> https://www.python.org\n"
]
}
],
"source": [
"for each in links:\n",
" href = each['href']\n",
" text = each.string\n",
" print(text + ' -> ' + href)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 크롬 개발자 도구를 이용해서 원하는 태그 찾기\n",
"- 웹 페이지의 태그를 beautiful soup의 결과만 보면서 확인할 수는 없다\n",
"- 원하는 곳의 태그가 무엇인지 확인하는 방법 중 간편한 방법!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### \"네이버 금융\" 사이트에서 특정 글자 가져오기\n",
"- 홈페이지의 '시장 지표' 부분에 들어가서, '미국의 환전 고시 환율' 글자 부분을 가져와보겠다\n",
" - 크롬에서 해당 홈페이지에 들어가서 '개발자 도구'를 확인\n",
" - 확인해 본 결과, 최종적으로 ```span 태그```의 ```value```라는 ```class```를 얻으면 된다!!"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:23.752946Z",
"start_time": "2020-05-28T00:14:23.746962Z"
}
},
"outputs": [],
"source": [
"from urllib.request import urlopen"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:24.506932Z",
"start_time": "2020-05-28T00:14:23.754940Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<script language=\"javascript\" src=\"/template/head_js.nhn?referer=info.finance.naver.com&amp;menu=marketindex&amp;submenu=market\">\n",
"</script>\n",
"<script src=\"/js/info/jindo.min.ns.1.5.3.euckr.js\" type=\"text/javascript\">\n",
"</script>\n",
"<script src=\"/js/jindo.1.5.3.element-text-patch.js\" type=\"text/javascript\">\n",
"</script>\n",
"<div id=\"container\" style=\"padding-bottom:0px;\">\n",
" <script language=\"JavaScript\" src=\"/js/flashObject.js?20200422112105\">\n",
" </script>\n",
" <div class=\"market_include\">\n",
" <div class=\"market_data\">\n",
" <div class=\"market1\">\n",
" <div class=\"title\">\n",
" <h2 class=\"h_market1\">\n",
" <span>\n",
" 환전 고시 환율\n",
" </span>\n",
" </h2>\n",
" </div>\n",
" <!-- data -->\n",
" <div class=\"data\">\n",
" <ul class=\"data_lst\" id=\"exchangeList\">\n",
" <li class=\"on\">\n",
" <a class=\"head usd\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_USDKRW\" onclick=\"clickcr(this, 'fr1.usdt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 미국 USD\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 1,237.70\n",
" </span>\n",
" <span class=\"txt_krw\">\n",
" <span class=\"blind\">\n",
" 원\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 3.20\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_USDKRW\" onclick=\"clickcr(this, 'fr1.usdc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_USDKRW.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.28 09:12\n",
" </span>\n",
" <span class=\"source\">\n",
" 하나은행 기준\n",
" </span>\n",
" <span class=\"count\">\n",
" 고시회차\n",
" <span class=\"num\">\n",
" 30\n",
" </span>\n",
" 회\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head jpy\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_JPYKRW\" onclick=\"clickcr(this, 'fr1.jpyt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 일본 JPY(100엔)\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 1,147.24\n",
" </span>\n",
" <span class=\"txt_krw\">\n",
" <span class=\"blind\">\n",
" 원\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 1.27\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_JPYKRW\" onclick=\"clickcr(this, 'fr1.jpyc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_JPYKRW.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.28 09:12\n",
" </span>\n",
" <span class=\"source\">\n",
" 하나은행 기준\n",
" </span>\n",
" <span class=\"count\">\n",
" 고시회차\n",
" <span class=\"num\">\n",
" 30\n",
" </span>\n",
" 회\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head eur\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_EURKRW\" onclick=\"clickcr(this, 'fr1.eurt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 유럽연합 EUR\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 1,362.83\n",
" </span>\n",
" <span class=\"txt_krw\">\n",
" <span class=\"blind\">\n",
" 원\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 2.72\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_EURKRW\" onclick=\"clickcr(this, 'fr1.eurc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_EURKRW.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.28 09:12\n",
" </span>\n",
" <span class=\"source\">\n",
" 하나은행 기준\n",
" </span>\n",
" <span class=\"count\">\n",
" 고시회차\n",
" <span class=\"num\">\n",
" 30\n",
" </span>\n",
" 회\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head cny\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_CNYKRW\" onclick=\"clickcr(this, 'fr1.cnyt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 중국 CNY\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 172.36\n",
" </span>\n",
" <span class=\"txt_krw\">\n",
" <span class=\"blind\">\n",
" 원\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 0.23\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/exchangeDetail.nhn?marketindexCd=FX_CNYKRW\" onclick=\"clickcr(this, 'fr1.cnyc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_CNYKRW.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.28 09:12\n",
" </span>\n",
" <span class=\"source\">\n",
" 하나은행 기준\n",
" </span>\n",
" <span class=\"count\">\n",
" 고시회차\n",
" <span class=\"num\">\n",
" 30\n",
" </span>\n",
" 회\n",
" </span>\n",
" </div>\n",
" </li>\n",
" </ul>\n",
" </div>\n",
" <!-- //data -->\n",
" </div>\n",
" <div class=\"market2\">\n",
" <div class=\"title\">\n",
" <h2 class=\"h_market2\">\n",
" <span>\n",
" 국제 시장 환율\n",
" </span>\n",
" </h2>\n",
" </div>\n",
" <!-- data -->\n",
" <div class=\"data\">\n",
" <ul class=\"data_lst\" id=\"worldExchangeList\">\n",
" <li class=\"on\">\n",
" <a class=\"head jpy_usd\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_USDJPY\" onclick=\"clickcr(this, 'fr2.jpyut', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 일본 엔/달러\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 107.8200\n",
" </span>\n",
" <span class=\"txt_jpy\">\n",
" <span class=\"blind\">\n",
" 엔\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 0.2300\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_USDJPY\" onclick=\"clickcr(this, 'fr2.jpyuc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_USDJPY.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.27\n",
" </span>\n",
" <span class=\"source\">\n",
" 모닝스타 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head usd_eur\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_EURUSD\" onclick=\"clickcr(this, 'fr2.eurdt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 달러/유로\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_dn\">\n",
" <span class=\"value\">\n",
" 1.0974\n",
" </span>\n",
" <span class=\"txt_usd\">\n",
" <span class=\"blind\">\n",
" 달러\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 0.0010\n",
" </span>\n",
" <span class=\"blind\">\n",
" 하락\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_EURUSD\" onclick=\"clickcr(this, 'fr2.eurdc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_EURUSD.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.27\n",
" </span>\n",
" <span class=\"source\">\n",
" 모닝스타 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head usd_gbp\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_GBPUSD\" onclick=\"clickcr(this, 'fr2.gbpdt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 달러/영국파운드\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_dn\">\n",
" <span class=\"value\">\n",
" 1.2215\n",
" </span>\n",
" <span class=\"txt_usd\">\n",
" <span class=\"blind\">\n",
" 달러\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 0.0141\n",
" </span>\n",
" <span class=\"blind\">\n",
" 하락\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_GBPUSD\" onclick=\"clickcr(this, 'fr2.gbpdc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_GBPUSD.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.27\n",
" </span>\n",
" <span class=\"source\">\n",
" 모닝스타 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head usd_idx\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_USDX\" onclick=\"clickcr(this, 'fr2.indt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 달러인덱스\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 99.0500\n",
" </span>\n",
" <span class=\"change\">\n",
" 0.1500\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_USDX\" onclick=\"clickcr(this, 'fr2.indc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/FX_USDX.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.27\n",
" </span>\n",
" <span class=\"source\">\n",
" ICE 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" </ul>\n",
" </div>\n",
" <!-- //data -->\n",
" </div>\n",
" <div class=\"market3\">\n",
" <div class=\"title\">\n",
" <h2 class=\"h_market3\">\n",
" <span>\n",
" 유가·금시세\n",
" </span>\n",
" </h2>\n",
" </div>\n",
" <!-- data -->\n",
" <div class=\"data\">\n",
" <ul class=\"data_lst\" id=\"oilGoldList\">\n",
" <li class=\"on\">\n",
" <a class=\"head wti\" href=\"/marketindex/worldOilDetail.nhn?marketindexCd=OIL_CL&amp;fdtc=2\" onclick=\"clickcr(this, 'fr3.wtit', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" WTI\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_dn\">\n",
" <span class=\"value\">\n",
" 32.81\n",
" </span>\n",
" <span class=\"txt_usd\">\n",
" <span class=\"blind\">\n",
" 달러\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 1.54\n",
" </span>\n",
" <span class=\"blind\">\n",
" 하락\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/worldOilDetail.nhn?marketindexCd=OIL_CL&amp;fdtc=2\" onclick=\"clickcr(this, 'fr3.wtic', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/OIL_CL.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.27\n",
" </span>\n",
" <span class=\"source\">\n",
" NYMEX(뉴욕상업거래소) 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head gasoline\" href=\"/marketindex/oilDetail.nhn?marketindexCd=OIL_GSL\" onclick=\"clickcr(this, 'fr3.oilt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 휘발유\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 1262.04\n",
" </span>\n",
" <span class=\"txt_krw\">\n",
" <span class=\"blind\">\n",
" 원\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 0.82\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/oilDetail.nhn?marketindexCd=OIL_GSL\" onclick=\"clickcr(this, 'fr3.oilc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/OIL_GSL.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.28\n",
" </span>\n",
" <span class=\"source\">\n",
" 한국석유공사 Opinet 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head gold_inter\" href=\"/marketindex/worldGoldDetail.nhn?marketindexCd=CMDT_GC&amp;fdtc=2\" onclick=\"clickcr(this, 'fr3.agoldt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 국제 금\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 1710.7\n",
" </span>\n",
" <span class=\"txt_usd\">\n",
" <span class=\"blind\">\n",
" 달러\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 5.10\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/worldGoldDetail.nhn?marketindexCd=CMDT_GC&amp;fdtc=2\" onclick=\"clickcr(this, 'fr3.agoldc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/CMDT_GC.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.27\n",
" </span>\n",
" <span class=\"source\">\n",
" COMEX(뉴욕상품거래소) 기준\n",
" </span>\n",
" </div>\n",
" </li>\n",
" <li class=\"\">\n",
" <a class=\"head gold_domestic\" href=\"/marketindex/goldDetail.nhn\" onclick=\"clickcr(this, 'fr3.kgoldt', '', '', event);\">\n",
" <h3 class=\"h_lst\">\n",
" <span class=\"blind\">\n",
" 국내 금\n",
" </span>\n",
" </h3>\n",
" <div class=\"head_info point_up\">\n",
" <span class=\"value\">\n",
" 68126.03\n",
" </span>\n",
" <span class=\"txt_krw\">\n",
" <span class=\"blind\">\n",
" 원\n",
" </span>\n",
" </span>\n",
" <span class=\"change\">\n",
" 357.88\n",
" </span>\n",
" <span class=\"blind\">\n",
" 상승\n",
" </span>\n",
" </div>\n",
" </a>\n",
" <a class=\"graph_img\" href=\"/marketindex/goldDetail.nhn\" onclick=\"clickcr(this, 'fr3.kgoldc', '', '', event);\">\n",
" <img alt=\"\" height=\"153\" src=\"https://ssl.pstatic.net/imgfinance/chart/marketindex/CMDT_GD.png\" width=\"295\"/>\n",
" </a>\n",
" <div class=\"graph_info\">\n",
" <span class=\"time\">\n",
" 2020.05.28 09:08\n",
" </span>\n",
" <span class=\"source\">\n",
" 신한은행 기준\n",
" </span>\n",
" (\n",
" <span class=\"num\">\n",
" 14\n",
" </span>\n",
" 회차)\n",
" </div>\n",
" </li>\n",
" </ul>\n",
" </div>\n",
" <!-- //data -->\n",
" </div>\n",
" </div>\n",
" </div>\n",
" <div class=\"marketindex_content\" id=\"content\">\n",
" <div class=\"section_news\">\n",
" <h3 class=\"h_news2\">\n",
" <span>\n",
" 주요 뉴스\n",
" </span>\n",
" </h3>\n",
" <div class=\"list_area\">\n",
" <ul>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=014&amp;articleId=0004432652&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '014_0004432652', '0', event);\">\n",
" [원자재시황] 국제유가, 미·중 긴장고조\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 08:29\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=018&amp;articleId=0004650166&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '018_0004650166', '1', event);\">\n",
" [외환브리핑]'홍콩 국가보안법' 표결 앞두\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 08:26\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=417&amp;articleId=0000547882&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '417_0000547882', '2', event);\">\n",
" [오늘의 환율전망] 원/달러, 1238원~\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 08:18\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=015&amp;articleId=0004348964&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '015_0004348964', '3', event);\">\n",
" 미중 갈등 고조…국제유가, 4%대 급락\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 07:41\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=008&amp;articleId=0004415760&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '008_0004415760', '4', event);\">\n",
" [유가마감] 미중 '홍콩 보안법' 충돌 우\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 05:55\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=018&amp;articleId=0004650066&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '018_0004650066', '5', event);\">\n",
" 커지는 美中 '홍콩 국보법' 갈등…WTI\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 05:24\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=001&amp;articleId=0011638769&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '001_0011638769', '6', event);\">\n",
" 국제유가, 미중 긴장고조에 급락…WTI 4\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.28 04:56\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=001&amp;articleId=0011638079&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '001_0011638079', '7', event);\">\n",
" 국고채 금리 대체로 상승…3년물 연 0.8\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.27 16:35\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=018&amp;articleId=0004649820&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '018_0004649820', '8', event);\">\n",
" [외환마감]위안화 연동 박스권 등락…원·달\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.27 16:13\n",
" </span>\n",
" </li>\n",
" <li>\n",
" <p>\n",
" <a href=\"/marketindex/news/newsRead.nhn?officeId=014&amp;articleId=0004431860&amp;category=\" onclick=\"clickcr(this, 'mhn.list', '014_0004431860', '9', event);\">\n",
" [원자재시황] 국제 유가 상승세.. WTI\n",
" </a>\n",
" <img alt=\"NEW\" height=\"8\" src=\"https://ssl.pstatic.net/static/nfinance/ico_new.gif\" width=\"8\"/>\n",
" </p>\n",
" <span>\n",
" 05.27 08:51\n",
" </span>\n",
" </li>\n",
" </ul>\n",
" </div>\n",
" <a class=\"btn_more\" href=\"/marketindex/news/newsList.nhn\" onclick=\"clickcr(this, 'mhn.more', '', '', event);\">\n",
" <img alt=\"더보기\" height=\"18\" src=\"https://ssl.pstatic.net/static/nfinance/btn_more.gif\" width=\"34\"/>\n",
" </a>\n",
" </div>\n",
" <div class=\"tab_default1\" id=\"tab_section\">\n",
" <ul>\n",
" <li class=\"on\">\n",
" <a href=\"./?tabSel=exchange#tab_section\" onclick=\"clickcr(this, 'mtb.exnoti', '', '', event);\">\n",
" <span class=\"tab1\">\n",
" 환전고시 환율\n",
" </span>\n",
" </a>\n",
" </li>\n",
" <li class=\"\">\n",
" <a href=\"./?tabSel=worldExchange#tab_section\" onclick=\"clickcr(this, 'mtb.interex', '', '', event);\">\n",
" <span class=\"tab2\">\n",
" 국제시장 환율\n",
" </span>\n",
" </a>\n",
" </li>\n",
" <li class=\"\">\n",
" <a href=\"./?tabSel=gold#tab_section\" onclick=\"clickcr(this, 'mtb.oilgold', '', '', event);\">\n",
" <span class=\"tab3\">\n",
" 유가 금시세\n",
" </span>\n",
" </a>\n",
" </li>\n",
" <li class=\"\">\n",
" <a href=\"./?tabSel=materials#tab_section\" onclick=\"clickcr(this, 'mtb.material', '', '', event);\">\n",
" <span class=\"tab4\">\n",
" 원자재\n",
" </span>\n",
" </a>\n",
" </li>\n",
" </ul>\n",
" <h2 class=\"blind\">\n",
" 환전고시 환율\n",
" </h2>\n",
" </div>\n",
" <div class=\"section_calculator\">\n",
" <h3 class=\"h_calculator\">\n",
" <span>\n",
" 환율계산기 (매매기준율 기준)\n",
" </span>\n",
" </h3>\n",
" <div class=\"calculator\">\n",
" <div class=\"inner\">\n",
" <div class=\"input\">\n",
" <div class=\"selectbox-noscript\" id=\"sInput\">\n",
" <select class=\"selectbox-source\" id=\"select_from\">\n",
" <option label=\"1\" value=\"1\">\n",
" 대한민국 원 KRW\n",
" </option>\n",
" <option class=\"selectbox-default\" label=\"1\" selected=\"selected\" value=\"1237.7\">\n",
" 미국 달러 USD\n",
" </option>\n",
" <option label=\"1\" value=\"1237.7\">\n",
" 미국 달러 USD\n",
" </option>\n",
" <option label=\"1\" value=\"1362.83\">\n",
" 유럽연합 유로 EUR\n",
" </option>\n",
" <option label=\"100\" value=\"11.4724\">\n",
" 일본 엔 JPY\n",
" </option>\n",
" <option label=\"1\" value=\"172.36\">\n",
" 중국 위안 CNY\n",
" </option>\n",
" <option label=\"1\" value=\"159.63\">\n",
" 홍콩 달러 HKD\n",
" </option>\n",
" <option label=\"1\" value=\"41.19\">\n",
" 대만 달러 TWD\n",
" </option>\n",
" <option label=\"1\" value=\"1517.67\">\n",
" 영국 파운드 GBP\n",
" </option>\n",
" <option label=\"1\" value=\"3214.81\">\n",
" 오만 리알 OMR\n",
" </option>\n",
" <option label=\"1\" value=\"899.82\">\n",
" 캐나다 달러 CAD\n",
" </option>\n",
" <option label=\"1\" value=\"1277.82\">\n",
" 스위스 프랑 CHF\n",
" </option>\n",
" <option label=\"1\" value=\"128.96\">\n",
" 스웨덴 크로나 SEK\n",
" </option>\n",
" <option label=\"1\" value=\"820.22\">\n",
" 호주 달러 AUD\n",
" </option>\n",
" <option label=\"1\" value=\"766.32\">\n",
" 뉴질랜드 달러 NZD\n",
" </option>\n",
" <option label=\"1\" value=\"50.21\">\n",
" 체코 코루나 CZK\n",
" </option>\n",
" <option label=\"1\" value=\"1.51\">\n",
" 칠레 페소 CLP\n",
" </option>\n",
" <option label=\"1\" value=\"182.6\">\n",
" 터키 리라 TRY\n",
" </option>\n",
" <option label=\"1\" value=\"0.44\">\n",
" 몽골 투그릭 MNT\n",
" </option>\n",
" <option label=\"1\" value=\"353.82\">\n",
" 이스라엘 세켈 ILS\n",
" </option>\n",
" <option label=\"1\" value=\"182.78\">\n",
" 덴마크 크로네 DKK\n",
" </option>\n",
" <option label=\"1\" value=\"125.59\">\n",
" 노르웨이 크로네 NOK\n",
" </option>\n",
" <option label=\"1\" value=\"329.48\">\n",
" 사우디아라비아 리얄 SAR\n",
" </option>\n",
" <option label=\"1\" value=\"4010.69\">\n",
" 쿠웨이트 디나르 KWD\n",
" </option>\n",
" <option label=\"1\" value=\"3277.81\">\n",
" 바레인 디나르 BHD\n",
" </option>\n",
" <option label=\"1\" value=\"336.96\">\n",
" 아랍에미리트 디르함 AED\n",
" </option>\n",
" <option label=\"1\" value=\"1745.7\">\n",
" 요르단 디나르 JOD\n",
" </option>\n",
" <option label=\"1\" value=\"78.14\">\n",
" 이집트 파운드 EGP\n",
" </option>\n",
" <option label=\"1\" value=\"38.78\">\n",
" 태국 바트 THB\n",
" </option>\n",
" <option label=\"1\" value=\"872.14\">\n",
" 싱가포르 달러 SGD\n",
" </option>\n",
" <option label=\"1\" value=\"284.2\">\n",
" 말레이시아 링깃 MYR\n",
" </option>\n",
" <option label=\"100\" value=\"0.08449999999999999\">\n",
" 인도네시아 루피아 IDR\n",
" </option>\n",
" <option label=\"1\" value=\"337.38\">\n",
" 카타르 리얄 QAR\n",
" </option>\n",
" <option label=\"1\" value=\"3.0\">\n",
" 카자흐스탄 텡게 KZT\n",
" </option>\n",
" <option label=\"1\" value=\"872.14\">\n",
" 브루나이 달러 BND\n",
" </option>\n",
" <option label=\"1\" value=\"16.3\">\n",
" 인도 루피 INR\n",
" </option>\n",
" <option label=\"1\" value=\"7.68\">\n",
" 파키스탄 루피 PKR\n",
" </option>\n",
" <option label=\"1\" value=\"14.57\">\n",
" 방글라데시 타카 BDT\n",
" </option>\n",
" <option label=\"1\" value=\"24.42\">\n",
" 필리핀 페소 PHP\n",
" </option>\n",
" <option label=\"1\" value=\"55.49\">\n",
" 멕시코 페소 MXN\n",
" </option>\n",
" <option label=\"1\" value=\"234.67\">\n",
" 브라질 레알 BRL\n",
" </option>\n",
" <option label=\"100\" value=\"0.053099999999999994\">\n",
" 베트남 동 VND\n",
" </option>\n",
" <option label=\"1\" value=\"71.35\">\n",
" 남아프리카 공화국 랜드 ZAR\n",
" </option>\n",
" <option label=\"1\" value=\"17.46\">\n",
" 러시아 루블 RUB\n",
" </option>\n",
" <option label=\"1\" value=\"3.91\">\n",
" 헝가리 포린트 HUF\n",
" </option>\n",
" <option label=\"1\" value=\"307.63\">\n",
" 폴란드 즈워티 PLN\n",
" </option>\n",
" </select>\n",
" <div class=\"selectbox-box\" onclick=\"clickcr(this, 'exl*c.clist1', '', '', event);\">\n",
" <div class=\"selectbox-label\">\n",
" </div>\n",
" </div>\n",
" <div class=\"selectbox-layer ly_calculator\">\n",
" <div class=\"selectbox-list\">\n",
" </div>\n",
" </div>\n",
" </div>\n",
" <div class=\"input_area\" id=\"input_from\">\n",
" <input id=\"input_from_money\" maxlength=\"10\" onclick=\"clickcr(this, 'exl*c.unit1', '', '', event);\" onfocus=\"changeActiveInput('from', 'to'); return false;\" onkeyup=\"calcExchange('from', 'to', 'on', event);\" type=\"text\" value=\"1\"/>\n",
" <img alt=\"\" height=\"13\" id=\"img_from_monetary\" src=\"https://ssl.pstatic.net/static/nfinance/img_money_USD.gif\" width=\"26\"/>\n",
" </div>\n",
" </div>\n",
" <div class=\"same\">\n",
" <img alt=\"\" height=\"15\" src=\"https://ssl.pstatic.net/static/nfinance/ico_same.gif\" width=\"28\"/>\n",
" </div>\n",
" <div class=\"view\">\n",
" <div class=\"selectbox-noscript\" id=\"sView\">\n",
" <select class=\"selectbox-source\" id=\"select_to\">\n",
" <option class=\"selectbox-default\" label=\"1\" value=\"1\">\n",
" 대한민국 원 KRW\n",
" </option>\n",
" <option label=\"1\" value=\"1\">\n",
" 대한민국 원 KRW\n",
" </option>\n",
" <option label=\"1\" value=\"1237.7\">\n",
" 미국 달러 USD\n",
" </option>\n",
" <option label=\"1\" value=\"1362.83\">\n",
" 유럽연합 유로 EUR\n",
" </option>\n",
" <option label=\"100\" value=\"11.4724\">\n",
" 일본 엔 JPY\n",
" </option>\n",
" <option label=\"1\" value=\"172.36\">\n",
" 중국 위안 CNY\n",
" </option>\n",
" <option label=\"1\" value=\"159.63\">\n",
" 홍콩 달러 HKD\n",
" </option>\n",
" <option label=\"1\" value=\"41.19\">\n",
" 대만 달러 TWD\n",
" </option>\n",
" <option label=\"1\" value=\"1517.67\">\n",
" 영국 파운드 GBP\n",
" </option>\n",
" <option label=\"1\" value=\"3214.81\">\n",
" 오만 리알 OMR\n",
" </option>\n",
" <option label=\"1\" value=\"899.82\">\n",
" 캐나다 달러 CAD\n",
" </option>\n",
" <option label=\"1\" value=\"1277.82\">\n",
" 스위스 프랑 CHF\n",
" </option>\n",
" <option label=\"1\" value=\"128.96\">\n",
" 스웨덴 크로나 SEK\n",
" </option>\n",
" <option label=\"1\" value=\"820.22\">\n",
" 호주 달러 AUD\n",
" </option>\n",
" <option label=\"1\" value=\"766.32\">\n",
" 뉴질랜드 달러 NZD\n",
" </option>\n",
" <option label=\"1\" value=\"50.21\">\n",
" 체코 코루나 CZK\n",
" </option>\n",
" <option label=\"1\" value=\"1.51\">\n",
" 칠레 페소 CLP\n",
" </option>\n",
" <option label=\"1\" value=\"182.6\">\n",
" 터키 리라 TRY\n",
" </option>\n",
" <option label=\"1\" value=\"0.44\">\n",
" 몽골 투그릭 MNT\n",
" </option>\n",
" <option label=\"1\" value=\"353.82\">\n",
" 이스라엘 세켈 ILS\n",
" </option>\n",
" <option label=\"1\" value=\"182.78\">\n",
" 덴마크 크로네 DKK\n",
" </option>\n",
" <option label=\"1\" value=\"125.59\">\n",
" 노르웨이 크로네 NOK\n",
" </option>\n",
" <option label=\"1\" value=\"329.48\">\n",
" 사우디아라비아 리얄 SAR\n",
" </option>\n",
" <option label=\"1\" value=\"4010.69\">\n",
" 쿠웨이트 디나르 KWD\n",
" </option>\n",
" <option label=\"1\" value=\"3277.81\">\n",
" 바레인 디나르 BHD\n",
" </option>\n",
" <option label=\"1\" value=\"336.96\">\n",
" 아랍에미리트 디르함 AED\n",
" </option>\n",
" <option label=\"1\" value=\"1745.7\">\n",
" 요르단 디나르 JOD\n",
" </option>\n",
" <option label=\"1\" value=\"78.14\">\n",
" 이집트 파운드 EGP\n",
" </option>\n",
" <option label=\"1\" value=\"38.78\">\n",
" 태국 바트 THB\n",
" </option>\n",
" <option label=\"1\" value=\"872.14\">\n",
" 싱가포르 달러 SGD\n",
" </option>\n",
" <option label=\"1\" value=\"284.2\">\n",
" 말레이시아 링깃 MYR\n",
" </option>\n",
" <option label=\"100\" value=\"0.08449999999999999\">\n",
" 인도네시아 루피아 IDR\n",
" </option>\n",
" <option label=\"1\" value=\"337.38\">\n",
" 카타르 리얄 QAR\n",
" </option>\n",
" <option label=\"1\" value=\"3.0\">\n",
" 카자흐스탄 텡게 KZT\n",
" </option>\n",
" <option label=\"1\" value=\"872.14\">\n",
" 브루나이 달러 BND\n",
" </option>\n",
" <option label=\"1\" value=\"16.3\">\n",
" 인도 루피 INR\n",
" </option>\n",
" <option label=\"1\" value=\"7.68\">\n",
" 파키스탄 루피 PKR\n",
" </option>\n",
" <option label=\"1\" value=\"14.57\">\n",
" 방글라데시 타카 BDT\n",
" </option>\n",
" <option label=\"1\" value=\"24.42\">\n",
" 필리핀 페소 PHP\n",
" </option>\n",
" <option label=\"1\" value=\"55.49\">\n",
" 멕시코 페소 MXN\n",
" </option>\n",
" <option label=\"1\" value=\"234.67\">\n",
" 브라질 레알 BRL\n",
" </option>\n",
" <option label=\"100\" value=\"0.053099999999999994\">\n",
" 베트남 동 VND\n",
" </option>\n",
" <option label=\"1\" value=\"71.35\">\n",
" 남아프리카 공화국 랜드 ZAR\n",
" </option>\n",
" <option label=\"1\" value=\"17.46\">\n",
" 러시아 루블 RUB\n",
" </option>\n",
" <option label=\"1\" value=\"3.91\">\n",
" 헝가리 포린트 HUF\n",
" </option>\n",
" <option label=\"1\" value=\"307.63\">\n",
" 폴란드 즈워티 PLN\n",
" </option>\n",
" </select>\n",
" <div class=\"selectbox-box\" onclick=\"clickcr(this, 'exl*c.clist2', '', '', event);\">\n",
" <div class=\"selectbox-label\">\n",
" </div>\n",
" </div>\n",
" <div class=\"selectbox-layer ly_calculator\">\n",
" <div class=\"selectbox-list\">\n",
" </div>\n",
" </div>\n",
" </div>\n",
" <div class=\"input_area\" id=\"input_to\">\n",
" <input id=\"input_to_money\" maxlength=\"10\" onclick=\"clickcr(this, 'exl*c.unit2', '', '', event);\" onfocus=\"changeActiveInput('to', 'from'); return false;\" onkeyup=\"calcExchange('to', 'from', 'on', event);\" type=\"text\"/>\n",
" <img alt=\"\" height=\"13\" id=\"img_to_monetary\" src=\"https://ssl.pstatic.net/static/nfinance/img_money_KRW.gif\" width=\"26\"/>\n",
" </div>\n",
" </div>\n",
" </div>\n",
" </div>\n",
" </div>\n",
" <div class=\"section_exchange\">\n",
" <div id=\"section_ex1\">\n",
" <h3 class=\"blind\" id=\"exchange1\">\n",
" 환전 고시 환율\n",
" </h3>\n",
" <div class=\"exchange_info\">\n",
" <span class=\"date\">\n",
" 2020.05.28 09:12\n",
" </span>\n",
" <span class=\"standard\">\n",
" 하나은행 기준\n",
" </span>\n",
" <span class=\"round\">\n",
" 고시회차\n",
" <em>\n",
" 30\n",
" </em>\n",
" 회\n",
" </span>\n",
" </div>\n",
" <iframe frameborder=\"0\" height=\"1378px\" id=\"frame_ex1\" marginheight=\"0\" marginwidth=\"0\" scrolling=\"no\" src=\"/marketindex/exchangeList.nhn\" title=\"환전 고시 환율\" width=\"100%\">\n",
" </iframe>\n",
" </div>\n",
" <ul class=\"tbl_info\">\n",
" <li>\n",
" 대부분의 통화명은 1달러가 다른 통화 기준으로 얼마인가를 나타내기 위해 국가명+화폐명/달러로 표기했습니다.\n",
" <br/>\n",
" 예외로 유로, 영국파운드 등은 1유로가 달러로 얼마인가를 표기하는 경우가 많기 때문에 달러/유로로 표기했습니다.\n",
" </li>\n",
" <li>\n",
" 심볼은 앞에 위치한 통화에 1이 생략된 형태로 USDJPY인 경우 1USD(달러)가 JPY(일본 엔)으로 얼마인가를 의미합니다.\n",
" </li>\n",
" <li>\n",
" 통화명과 심볼로 네이버 금융검색을 하실 경우 해당 환율을 바로 조회하실 수 있습니다.\n",
" </li>\n",
" </ul>\n",
" </div>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.Component.1.0.3.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.UIComponent.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.HTMLComponent.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.Timer.1.0.3.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.LayerManager.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.LayerPosition.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.RolloverArea.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.RolloverClick.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/jindoComponent/jindo.SelectBox.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script charset=\"euckr\" language=\"javascript\" src=\"/js/jindoComponent/jindo.TextRange.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script charset=\"euckr\" language=\"javascript\" src=\"/js/jindoComponent/jindo.WatchInput.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script charset=\"euckr\" language=\"javascript\" src=\"/js/jindoComponent/jindo.Formatter.1.1.0.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script charset=\"euckr\" language=\"javascript\" src=\"/js/jindoComponent/jindo.NumberFormatter.1.0.1.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/exchange.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script type=\"text/javascript\">\n",
" // exchangeDetail.jsp에도 동일 스크립트 있음 - 로딩시 디자인이 0.5초간 디자인이 안뜬다는 이슈로 include하지 않고 같은 스크립트를 두벌로 관리함\n",
"\n",
"//환율 계산\n",
"function calcExchange(str1, str2, cssOn, event) {\n",
"\tvar oEvent = event || window.event;\n",
" var sKeyCode = (undefined === oEvent) ? undefined : jindo.$Event(oEvent).key().keyCode;\n",
"\t\n",
"\tif (sKeyCode != 13 && sKeyCode != 27 && sKeyCode != 37 && sKeyCode != 38 && sKeyCode != 110 && sKeyCode != 229) {\n",
"\t\tif (str1 == '' && str2 == '') {\n",
"\t\t\tif (jindo.$('input_to').className == 'input_area') {\n",
"\t\t\t\tstr1 = 'from';\n",
"\t\t\t\tstr2 = 'to';\n",
"\t\t\t} else {\n",
"\t\t\t\tstr1 = 'to';\n",
"\t\t\t\tstr2 = 'from';\n",
"\t\t\t}\n",
"\t\t}\n",
"\t\t\n",
"\t\tvar regExp = new RegExp(\"[^0-9\\.\\,]\");\n",
"\t var sInputValue = jindo.$('input_' + str1 + '_money').value;\n",
"\t\t\n",
"\t if(regExp.test(sInputValue)){\n",
"\t\t\talert('숫자, 소수점(.)만 입력하실 수 있습니다.');\n",
"\t\t\tjindo.$('input_' + str1 + '_money').value = revertInputText(sInputValue);\n",
"\t\t\treturn false;\n",
"\t\t}\n",
"\t\t\n",
"\t\t// 사용자가 입력한 콤마(,) 제거\n",
"\t if (sInputValue.substr(sInputValue.length - 1, 1) == ',') {\n",
"\t \tjindo.$('input_' + str1 + '_money').value = revertInputText(sInputValue);\n",
"\t \treturn false;\n",
"\t }\n",
"\t\t\n",
"\t\t// 맨 앞에 있는 숫자 0 없애기\n",
"\t\tif (sInputValue == '0' || sInputValue == '.' || sInputValue == ',') {\n",
"\t\t\tjindo.$('input_' + str1 + '_money').value = revertInputText(sInputValue);\n",
"\t\t\treturn false;\n",
"\t\t}\n",
"\t\t\n",
"\t\t// 소수점 2개가 없도록\n",
"\t\tvar match = sInputValue.match(/\\./g);\n",
"\t\tif (match != null && match.length >= 2) {\n",
"\t\t\tjindo.$('input_' + str1 + '_money').value = revertInputText(sInputValue);\n",
"\t\t\treturn false;\n",
"\t\t}\n",
"\t\t\n",
"\t\t// 소수점을 입력한 경우, 일단 대기\n",
"\t\tvar pointPosIndex = sInputValue.indexOf('.');\n",
"\t\tif (pointPosIndex != -1 && pointPosIndex == sInputValue.length - 1) {\n",
"\t\t\treturn false;\n",
"\t\t}\n",
"\t\t\n",
"\t\t// 소수점 2자리 유지\n",
"\t\tif (pointPosIndex != -1 && sInputValue.substring(pointPosIndex + 1, sInputValue.length).length > 2) {\n",
"\t\t\tjindo.$('input_' + str1 + '_money').value = revertInputText(sInputValue);\n",
"\t\t\treturn false;\n",
"\t\t}\n",
"\t\t\n",
"\t\tvar e_select_from\t= jindo.$('select_'+str1);\n",
"\t\tvar e_select_to\t= jindo.$('select_'+str2);\n",
"\t\n",
"\t\tvar input_from_money\t= jindo.$('input_'+str1+'_money').value ;\n",
"\t\tvar input_from\t\t= e_select_from.options[e_select_from.selectedIndex].value ;\n",
"\t\tvar input_to\t\t= e_select_to.options[e_select_to.selectedIndex].value ;\n",
"\t\tvar unit_from\t= e_select_from.options[e_select_from.selectedIndex].text ;\n",
"\t\tvar unit_to\t\t= e_select_to.options[e_select_to.selectedIndex].text ;\n",
"\t\tinput_from_money = input_from_money.replace(/ |,|\\t/g, \"\") ;\n",
"\t\tinput_from\t= input_from.replace(/ |,|\\t/g, \"\") ;\n",
"\t\tinput_to\t= input_to.replace(/ |,|\\t/g, \"\") ;\n",
"\t\tunit_from = unit_from.substr(unit_from.length-3, 3);\n",
"\t\tunit_to = unit_to.substr(unit_to.length-3, 3);\n",
"\t\n",
"\t\tvar str1_result = input_from_money * 1 ;\n",
"\t\tvar str1_str\t= str1_result.toFixed(0) ;\n",
"\t\tvar str1_len = str1_str.length ;\n",
"\t\tvar str1_result_str = new String(\"\") ;\n",
"\t\n",
"\t\tif(str1_str > str1_result)\n",
"\t\t\tstr1_str = new String(str1_str-1) ;\n",
"\t\n",
"\t\tif (str1_len >= 3) {\n",
"\t\t\tfor (i = str1_len - 3; i > 0; i-=3)\n",
"\t\t\t\tstr1_result_str = \",\" + str1_str.substr(i, 3) + str1_result_str ;\n",
"\t\n",
"\t\t\tstr1_result_str = str1_str.substr(0, 3+i) + str1_result_str ;\n",
"\t\n",
"\t\t\tfor (var i=0; i<input_from_money.length; i++) {\n",
"\t\t\t\tif (input_from_money.substr(i,1) != '0') {\n",
"\t\t\t\t\tinput_from_money = input_from_money.substring(i,input_from_money.length) ;\n",
"\t\t\t\t\tbreak;\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\n",
"\t\t\tif (str1_str != input_from_money) {\n",
"\t\t\t\tstr1_result_str += str1_result.toFixed(input_from_money.split(\".\")[1].length).substr(str1_len, input_from_money.split(\".\")[1].length + 1) ;\n",
"\t\t\t}\n",
"\t\t} else\n",
"\t\t\tstr1_result_str = input_from_money ;\n",
"\t\n",
"\t\tvar str2_result = input_from_money * input_from / input_to ;\n",
"\t\tvar str2_str\t= str2_result.toFixed(0) ;\n",
"\t\tvar str2_len = str2_str.length ;\n",
"\t\tvar str2_result_str = new String(\"\") ;\n",
"\t\n",
"\t\tif (str2_str > str2_result)\n",
"\t\t\tstr2_str = new String(str2_str-1) ;\n",
"\t\n",
"\t\tif (str2_len >= 3) {\n",
"\t\t\tfor (i = str2_len - 3; i > 0; i-=3)\n",
"\t\t\t\tstr2_result_str = \",\" + str2_str.substr(i, 3) + str2_result_str ;\n",
"\t\n",
"\t\t\tstr2_result_str = str2_str.substr(0, 3+i) + str2_result_str ;\n",
"\t\t\tstr2_result_str += str2_result.toFixed(2).substr(str2_len, 3) ;\n",
"\t\t} else\n",
"\t\t\tstr2_result_str = str2_result.toFixed(2) ;\n",
"\t\n",
"\t\tjindo.$('input_'+str1+'_money').value = str1_result_str;\n",
"\t\tjindo.$('input_'+str2+'_money').value = str2_result_str;\n",
"\t\tjindo.$('img_'+str1+'_monetary').src = \"https://ssl.pstatic.net/static/nfinance/img_money_\"+unit_from+\".gif\";\n",
"\t\tjindo.$('img_'+str2+'_monetary').src = \"https://ssl.pstatic.net/static/nfinance/img_money_\"+unit_to+\".gif\";\n",
"\t\tjindo.$Element(jindo.$('input_'+str1)).addClass(\"on\");\n",
"\t\tjindo.$Element(jindo.$('input_'+str2)).removeClass(\"on\");\n",
"\t\tif (cssOn == \"off\"){\n",
"\t\t\tjindo.$Element(jindo.$('input_'+str1)).removeClass(\"on\");\n",
"\t\t}\n",
"\t}\n",
"}\n",
"\n",
"function revertInputText(sOrgText) {\n",
"\tvar sResult = sOrgText;\n",
"\t\n",
"\tif (sOrgText != '') {\n",
"\t\tsResult = sOrgText.substr(0, sOrgText.length - 1);\n",
"\t}\n",
"\t\n",
"\treturn sResult;\n",
"}\n",
"\n",
"jindo.$Fn(function(){\n",
"\tchartMouseOverEvent('exchangeList');\t\t\n",
" }).attach(document, \"domready\");\n",
" </script>\n",
" </div>\n",
" <script language=\"javascript\" src=\"/js/jindo_ellipse.js?20200422112105\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/util.js?20200422112105\">\n",
" </script>\n",
" <script type=\"text/javascript\">\n",
" function ellipseTopNewsTitle() {\n",
"\tjindo.EllipseText.factory(jindo.$$(\".news_list ul li\"), {nAssistWidth: 10});\n",
"}\n",
"\n",
"\n",
"var basicDates;\n",
"\n",
"function initDate() {\n",
"\tbasicDates = jindo.$H();\n",
"\tbasicDates.add('', '');\n",
"\tbasicDates.add('', '');\n",
"\tbasicDates.add('', '');\n",
"\tbasicDates.add('', '');\n",
"\tbasicDates.add('', '');\n",
"\tbasicDates.add('', '');\n",
"}\n",
"\n",
"var basicDescriptions;\n",
"\n",
"function initDescription() {\n",
"\tbasicDescriptions = jindo.$H();\n",
"\tbasicDescriptions.add('CMDT_CDY','<em></em> 기준<span>단위:</span>');\n",
"\tbasicDescriptions.add('CMDT_PDY','<em></em> 기준<span>단위:</span>');\n",
"\tbasicDescriptions.add('CMDT_NG','<em></em> 기준<span>단위:</span>');\n",
"\tbasicDescriptions.add('CMDT_S','<em></em> 기준<span>단위:</span>');\n",
"\tbasicDescriptions.add('CMDT_C','<em></em> 기준<span>단위:</span>');\n",
"\tbasicDescriptions.add('CMDT_SB','<em></em> 기준<span>단위:</span>');\n",
"}\n",
"\n",
"function setEvent(num, imgChartUrl){\t\n",
"\tvar parentElemnt = jindo.$$('.tbl_market')[num];\n",
"\tvar elementList = jindo.$$('tr',parentElemnt);\n",
"\t\n",
"\tjindo.$Fn(function(e){\t\n",
"\t\tvar elementListSize = elementList.length;\n",
"\t\t\n",
"\t\tfor(var i = 0 ; i < elementListSize ; i ++)\n",
"\t\t{\n",
"\t\t\tvar selectedElement = jindo.$Element(elementList[i]);\n",
"\t\t\tvar selectedClassName = selectedElement.className();\n",
"\t\t\tif (selectedClassName != \"\") {\n",
"\t\t\t\tselectedElement.removeClass(selectedClassName);\n",
"\t\t\t\tselectedElement.addClass(selectedClassName.replace(\"on\",\"\"));\n",
"\t\t\t}\n",
"\t\t} \n",
"\t\t\n",
"\t\tvar ele = jindo.$Element(jindo.$Event(e).currentElement);\n",
"\t\tvar linkUrl = jindo.$$.getSingle('a' , ele.$value()).href;\n",
"\t\tvar marketindexCd = linkUrl.split('=')[1];\n",
"\t\tvar className = ele.className();\n",
"\t\tele.removeClass(className);\n",
"\t\tele.addClass(className+\" on\");\n",
"\t\tvar graphElement = jindo.$Element(jindo.$$('.thum')[num]);\n",
"\t\tgraphElement.html('<a href=\\\"'+linkUrl+'\\\"><img src=\\\"https://ssl.pstatic.net/imgfinance/chart/marketindex/' + marketindexCd + '.png\\\" width=\\\"295\\\" height=\\\"153\\\" alt=\"\"></a>');\n",
"\t\t\n",
"\t\tif (basicDates.hasKey(marketindexCd)) {\n",
"\t\t\tjindo.$Element(\"basicDate\").text(basicDates.$(marketindexCd));\n",
"\t\t}\n",
"\t\tif (basicDescriptions.hasKey(marketindexCd)) {\n",
"\t\t\tjindo.$Element(\"basicDescription\").html(basicDescriptions.$(marketindexCd));\n",
"\t\t}\n",
"\t\n",
"\t}).attach(elementList, \"mouseover\");\t\n",
"}\n",
"\n",
"jindo.$Fn(function(){\n",
"\t\tinitDate();\n",
"\t\tinitDescription();\n",
"\t\tchartMouseOverEvent('exchangeList');\n",
"\t\tchartMouseOverEvent('worldExchangeList');\n",
"\t\tchartMouseOverEvent('oilGoldList');\n",
"\t\t//setEvent(0);\n",
"\t\t//setEvent(1);\n",
"\t\tjindo.$$('title')[0].innerHTML = \"시장지표 : 네이버 금융\";\n",
"}).attach(document, \"domready\");\n",
" </script>\n",
" <div class=\"aside\" id=\"marketindex_aside\">\n",
" <div class=\"section_aside\">\n",
" <h3 class=\"h_interest\">\n",
" <span>\n",
" 국내시장금리\n",
" </span>\n",
" </h3>\n",
" <table class=\"tbl_exchange market\" summary=\"국제시장 환율 리스트\">\n",
" <caption>\n",
" 국내시장금리\n",
" </caption>\n",
" <colgroup>\n",
" <col width=\"94\"/>\n",
" <col width=\"50\"/>\n",
" <col width=\"75\"/>\n",
" </colgroup>\n",
" <thead>\n",
" <tr>\n",
" <th>\n",
" 구분\n",
" </th>\n",
" <th>\n",
" 금리\n",
" </th>\n",
" <th>\n",
" 등락율\n",
" </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr class=\"same\">\n",
" <th class=\"th_inter4\">\n",
" <a href=\"/marketindex/interestDetail.nhn?marketindexCd=IRR_CD91\" onclick=\"clickcr(this, 'rid.local', 'IRR_CD91', '1', event);\">\n",
" <span>\n",
" CD금리(91일)\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 1.02\n",
" </td>\n",
" <td>\n",
" <img alt=\"보합\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_same2.gif\" width=\"7\"/>\n",
" 0.00\n",
" </td>\n",
" </tr>\n",
" <tr class=\"same\">\n",
" <th class=\"th_inter1\">\n",
" <a href=\"/marketindex/interestDetail.nhn?marketindexCd=IRR_CALL\" onclick=\"clickcr(this, 'met.8', 'IRR_CALL', '2', event);\">\n",
" <span>\n",
" 콜 금리\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 0.72\n",
" </td>\n",
" <td>\n",
" <img alt=\"보합\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_same2.gif\" width=\"7\"/>\n",
" 0.00\n",
" </td>\n",
" </tr>\n",
" <tr class=\"up\">\n",
" <th class=\"th_inter2\">\n",
" <a href=\"/marketindex/interestDetail.nhn?marketindexCd=IRR_GOVT03Y\" onclick=\"clickcr(this, 'met.8', 'IRR_GOVT03Y', '3', event);\">\n",
" <span>\n",
" 국고채 (3년)\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 0.86\n",
" </td>\n",
" <td>\n",
" <img alt=\"상승\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_up.gif\" width=\"7\"/>\n",
" 0.03\n",
" </td>\n",
" </tr>\n",
" <tr class=\"up\">\n",
" <th class=\"th_inter3\">\n",
" <a href=\"/marketindex/interestDetail.nhn?marketindexCd=IRR_CORP03Y\" onclick=\"clickcr(this, 'met.8', 'IRR_CORP03Y', '4', event);\">\n",
" <span>\n",
" 회사채 (3년)\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 2.19\n",
" </td>\n",
" <td>\n",
" <img alt=\"상승\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_up.gif\" width=\"7\"/>\n",
" 0.02\n",
" </td>\n",
" </tr>\n",
" <tr class=\"down\">\n",
" <th class=\"th_inter5\">\n",
" <a href=\"/marketindex/interestDetail.nhn?marketindexCd=IRR_COFIXBAL\" onclick=\"clickcr(this, 'met.8', 'IRR_COFIXBAL', '5', event);\">\n",
" <span>\n",
" COFIX 잔액\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 1.61\n",
" </td>\n",
" <td>\n",
" <img alt=\"하락\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_down.gif\" width=\"7\"/>\n",
" 0.05\n",
" </td>\n",
" </tr>\n",
" <tr class=\"down\">\n",
" <th class=\"th_inter6\">\n",
" <a href=\"/marketindex/interestDetail.nhn?marketindexCd=IRR_COFIXNEW\" onclick=\"clickcr(this, 'met.8', 'IRR_COFIXNEW', '6', event);\">\n",
" <span>\n",
" COFIX 신규취급액\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 1.20\n",
" </td>\n",
" <td>\n",
" <img alt=\"하락\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_down.gif\" width=\"7\"/>\n",
" 0.06\n",
" </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" <table class=\"tbl_exchange tbl_exchange_v1 market\" style=\"margin-top:10px;\" summary=\"달러 인덱스\">\n",
" <caption>\n",
" 달러 인덱스\n",
" </caption>\n",
" <colgroup>\n",
" <col width=\"88\"/>\n",
" <col width=\"46\"/>\n",
" <col width=\"66\"/>\n",
" </colgroup>\n",
" <thead>\n",
" <tr>\n",
" <th>\n",
" 구분\n",
" </th>\n",
" <th>\n",
" 금리\n",
" </th>\n",
" <th>\n",
" 등락율\n",
" </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr class=\"other_t1 up\">\n",
" <th class=\"th_inter7\">\n",
" <a href=\"/marketindex/worldExchangeDetail.nhn?marketindexCd=FX_USDX&amp;fdtc=4\" onclick=\"clickcr(this, 'rid.dollar', 'FX_USDX', '', event);\">\n",
" <span>\n",
" 달러 인덱스\n",
" </span>\n",
" </a>\n",
" </th>\n",
" <td>\n",
" 99.0500\n",
" </td>\n",
" <td>\n",
" <img alt=\"상승\" height=\"6\" src=\"https://ssl.pstatic.net/static/nfinance/ico_up.gif\" width=\"7\"/>\n",
" 0.1500\n",
" </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </div>\n",
" <div class=\"section_aside\">\n",
" <div class=\"tab_search search3\">\n",
" <a href=\"#\" onclick=\"clickcr(this, 'rch.1', '', '', event); return false;\">\n",
" <span>\n",
" 최근조회\n",
" </span>\n",
" </a>\n",
" <a href=\"#\" onclick=\"clickcr(this, 'rch.3', '', '', event); return false;\">\n",
" <span>\n",
" MY STOCK\n",
" </span>\n",
" </a>\n",
" </div>\n",
" <h3 class=\"blind\">\n",
" 최근조회\n",
" </h3>\n",
" <table class=\"tbl_search\" summary=\"최근조회 리스트\">\n",
" <caption>\n",
" 최근조회\n",
" </caption>\n",
" <colgroup>\n",
" <col/>\n",
" <col width=\"55\"/>\n",
" <col width=\"87\"/>\n",
" </colgroup>\n",
" <thead>\n",
" <tr>\n",
" <th>\n",
" 업체명\n",
" </th>\n",
" <th>\n",
" 거래량\n",
" </th>\n",
" <th>\n",
" 전일비\n",
" </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
" </table>\n",
" <div class=\"more_info\">\n",
" <span>\n",
" <a href=\"#\" onclick=\"clickcr(this, 'rch.5', '', '', event); return false;\">\n",
" <img alt=\"이전\" height=\"15\" src=\"https://ssl.pstatic.net/static/nfinance/btn_prev2.gif\" width=\"17\"/>\n",
" </a>\n",
" <a href=\"#\" onclick=\"clickcr(this, 'rch.6', '', '', event); return false;\">\n",
" <img alt=\"다음\" height=\"15\" src=\"https://ssl.pstatic.net/static/nfinance/btn_next2.gif\" width=\"17\"/>\n",
" </a>\n",
" </span>\n",
" <a class=\"btn_more _mystock_more_info\" href=\"#\" onclick=\"javascript:openMyitemNew('https://finance.naver.com'); clickcr(this, 'rch.7', '', '', event);\">\n",
" <img alt=\"더보기\" height=\"10\" src=\"https://ssl.pstatic.net/static/nfinance/btn_more5.gif\" width=\"33\"/>\n",
" </a>\n",
" </div>\n",
" </div>\n",
" <div class=\"section_aside\">\n",
" <h3 class=\"h_report\">\n",
" <span>\n",
" 경제분석 리포트\n",
" </span>\n",
" </h3>\n",
" <ul class=\"list_report\">\n",
" <li>\n",
" <a href=\"/research/economy_read.nhn?nid=6749\" onclick=\"clickcr(this, 'rer.list', '', '', event);\">\n",
" 국내외 경제이슈\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"/research/economy_read.nhn?nid=6748\" onclick=\"clickcr(this, 'rer.list', '', '', event);\">\n",
" 중국, 경제지표 회복보다 미-중 ...\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"/research/economy_read.nhn?nid=6747\" onclick=\"clickcr(this, 'rer.list', '', '', event);\">\n",
" COVID-19 위기 속에서 한국...\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"/research/economy_read.nhn?nid=6746\" onclick=\"clickcr(this, 'rer.list', '', '', event);\">\n",
" 국내외 경제이슈\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"/research/economy_read.nhn?nid=6745\" onclick=\"clickcr(this, 'rer.list', '', '', event);\">\n",
" 중요한 것은 인하보다 국고채 매입...\n",
" </a>\n",
" </li>\n",
" </ul>\n",
" <a class=\"btn_more\" href=\"/research/economy_list.nhn\" onclick=\"clickcr(this, 'rer.more', '', '', event);\">\n",
" <img alt=\"경제분석 리포트 더보기\" height=\"18\" src=\"https://ssl.pstatic.net/static/nfinance/btn_more.gif\" width=\"34\"/>\n",
" </a>\n",
" </div>\n",
" </div>\n",
" <script language=\"javascript\" src=\"/js/info/myStock.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\" src=\"/js/util.js?20200422112105\" type=\"text/javascript\">\n",
" </script>\n",
" <script language=\"javascript\">\n",
" function toggleTabSearch(e){\n",
"\tvar currentElement = jindo.$Element(jindo.$Event(e).currentElement);\n",
"\tvar parentElement = currentElement.parent();\n",
"\tvar id = currentElement.className();\n",
"\tvar order = parentElement.indexOf(currentElement) + 3;\n",
"\tparentElement.className(\"tab_search search\"+ order);\n",
"\n",
"\t// 페이징을 위해서 order값에 따라 최근조회인지 mystock인지 type을 저장\n",
"\tif (order == 3) {\n",
"\t\tcurrentType = \"recent\";\n",
"\t} else {\n",
"\t\tcurrentType = \"mystock\";\n",
"\t}\n",
"}\n",
"\n",
"jindo.$Fn(function(){\n",
"\tif ('true' == 'true') {\n",
"\t\tgetStockRightMenuData('000000', 'recent', 1, 'https://finance.naver.com', 'https://ssl.pstatic.net/static/nfinance');\n",
"\n",
"\t\tvar tabSearchArea = jindo.$$.getSingle('.tab_search');\n",
"\t\tvar moreInfoArea = jindo.$Element(jindo.$$.getSingle('.tbl_search')).next().$value();\n",
"\n",
"\t\tjindo.$Fn(function(e) {toggleTabSearch(e); getStockRightMenuData('000000', 'recent', 1, 'https://finance.naver.com', 'https://ssl.pstatic.net/static/nfinance'); }).attach(jindo.$$.getSingle('a' ,tabSearchArea), 'click');\n",
"\t\tjindo.$Fn(function(e) {toggleTabSearch(e); getStockRightMenuData('000000', 'mystock', 1, 'https://finance.naver.com', 'https://ssl.pstatic.net/static/nfinance'); }).attach(jindo.$$('a' ,tabSearchArea)[1], 'click');\n",
"\t\tjindo.$Fn(function(e) {updatePageForPaging (currentType, 'up', 'https://finance.naver.com', 'https://ssl.pstatic.net/static/nfinance'); }).attach(jindo.$$.getSingle('a', moreInfoArea), 'click');\n",
"\t\tjindo.$Fn(function(e) {updatePageForPaging (currentType, 'down', 'https://finance.naver.com', 'https://ssl.pstatic.net/static/nfinance'); }).attach(jindo.$$('a', moreInfoArea)[1], 'click');\n",
"\t}\n",
"\n",
"}).attach(document,\"domready\");\n",
"\n",
"function openMyitemNew(stockHost) {\n",
"\tvar selectedElement = jindo.$Element(jindo.$$.getSingle(\".tab_search\"));\n",
"\tif (selectedElement != null) {\n",
"\t\tif (selectedElement.hasClass(\"search1\")) {\n",
"\t\t\tdocument.location.href = stockHost + '/mystock/recentSearchItemList.nhn';\n",
"\t\t} else {\n",
"\t\t\tdocument.location.href = stockHost + '/mystock/itemList.nhn';\n",
"\t\t}\n",
"\t}\n",
"}\n",
" </script>\n",
"</div>\n",
"<div id=\"footer\">\n",
" <ul>\n",
" <li class=\"first\">\n",
" <a href=\"https://www.naver.com/rules/service.html\" onclick=\"clickcr(this, 'fot.service', '', '', event);\" target=\"_blank\">\n",
" 이용약관\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"/rules.nhn\" onclick=\"clickcr(this, 'fot.policy', '', '', event);\" target=\"_blank\">\n",
" 금융게시판 운영원칙\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"https://www.naver.com/rules/privacy.html\" onclick=\"clickcr(this, 'fot.privacy', '', '', event);\" target=\"_blank\">\n",
" <strong>\n",
" 개인정보처리방침\n",
" </strong>\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"https://www.naver.com/rules/disclaimer.html\" onclick=\"clickcr(this, 'fot.limit', '', '', event);\" target=\"_blank\">\n",
" 책임의 한계와 법적고지\n",
" </a>\n",
" </li>\n",
" <li>\n",
" <a href=\"https://help.naver.com/support/alias/contents2/finance/finance_1.naver\" onclick=\"clickcr(this, 'fot.help', '', '', event);\" target=\"_blank\">\n",
" 금융 고객센터\n",
" </a>\n",
" </li>\n",
" </ul>\n",
" <p class=\"desc\">\n",
" 네이버(주)에서 제공하는 금융정보는 투자 참고 사항이며, 오류가 발생할 수 있고 지연될 수 있습니다.\n",
" <br/>\n",
" 네이버(주)는 제공된 정보에 의한 투자결과에 대한 법적인 책임을 지지 않습니다. 또한 게시된 정보를 무단으로 배포할 수 없습니다.\n",
" </p>\n",
" <address>\n",
" <a class=\"logo\" href=\"https://www.navercorp.com/\" onclick=\"clickcr(this, 'fot.nhn', '', '', event);\" target=\"_blank\">\n",
" <img alt=\"NAVER\" height=\"11\" src=\"https://ssl.pstatic.net/static/nfinance/2019/02/22/ci_naver.png\" width=\"58\"/>\n",
" </a>\n",
" <em>\n",
" Copyright ©\n",
" </em>\n",
" <a href=\"https://www.navercorp.com/\" onclick=\"clickcr(this, 'fot.nhn', '', '', event);\" target=\"_blank\">\n",
" NAVER Corp.\n",
" </a>\n",
" <span>\n",
" All Rights Reserved.\n",
" </span>\n",
" </address>\n",
"</div>\n",
"<script type=\"text/javascript\">\n",
" function isVisible(obj) {\n",
" if (obj == document) return true\n",
" \n",
" if (!obj) return false\n",
" if (!obj.parentNode) return false\n",
" if (obj.style) {\n",
" if (obj.style.display == 'none') return false\n",
" if (obj.style.visibility == 'hidden') return false\n",
" }\n",
" \n",
" if (window.getComputedStyle) {\n",
" var style = window.getComputedStyle(obj, \"\")\n",
" if (style.display == 'none') return false\n",
" if (style.visibility == 'hidden') return false\n",
" }\n",
" \n",
" var style = obj.currentStyle\n",
" if (style) {\n",
" if (style['display'] == 'none') return false\n",
" if (style['visibility'] == 'hidden') return false\n",
" }\n",
" \n",
" return isVisible(obj.parentNode)\n",
"}\n",
"\n",
"function isChildOf(myobj, containerObj) {\n",
"\twhile(myobj != undefined) {\n",
"\t\tif (myobj == document.body) {\n",
"\t\t\tbreak;\n",
"\t\t} \n",
"\t\tif (myobj == containerObj) {\n",
"\t\t\treturn true;\n",
"\t\t}\n",
"\t\tmyobj = myobj.parentElement;\n",
"\t}\n",
"\treturn false;\t\n",
"}\n",
"\n",
"function gnbLayerClose(e){\n",
"\tvar target = e.target ? e.target : e.srcElement;\n",
"\tif (isVisible(document.getElementById('gnb_service_lyr')) || isVisible(document.getElementById('gnb_notice_lyr')) ||isVisible(document.getElementById('gnb_my_lyr')) ) {\n",
"\t\tif (!isChildOf(target, document.getElementById('gnb'))) {\n",
"\t\t\tgnbAllLayerClose();\n",
"\t\t}\n",
"\t}\t\n",
"}\n",
"\n",
"var isIE = (navigator.userAgent.toLowerCase().indexOf(\"msie\")!=-1 && window.document.all) ? true:false;\n",
"if (isIE) {\n",
"\tdocument.attachEvent('onmousedown', gnbLayerClose);\n",
"} else {\n",
"\twindow.addEventListener('mousedown', gnbLayerClose);\n",
"}\n",
"</script>\n",
"\n"
]
}
],
"source": [
"url = \"https://finance.naver.com/marketindex/\"\n",
"page = urlopen(url)\n",
"\n",
"soup = BeautifulSoup(page, \"html.parser\")\n",
"\n",
"print(soup.prettify())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- ```span 태그```의 ```value```라는 ```class```를 얻기 위해, ```find_all``` 명령을 사용\n",
"- 결과가 '리스트'로 반환되기 때문에 첫 번째 요소 값을 선택하도록 지정"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:24.520895Z",
"start_time": "2020-05-28T00:14:24.508923Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'1,237.70'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup.find_all('span', 'value')[0].string"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**위 결과를 보면, \"*네이버 금융 --> 시장 지표 --> 미국 USD 환전 고시 환율*\" 가격이 출력된 것을 확인할 수 있다**\n",
"- 웹 스크래핑을 할 홈페이지에서 '개발자 도구'를 확인하여 접근해야 할 태그를 파악한다면, 위와 같이 쉽게(?) 홈페이지의 정보들을 가져올 수 있다!!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 실전: 시카고 샌드위치 맛집 소개 사이트에 접근하기\n",
"- 홈페이지에서 '개발자 도구'를 확인한 결과, 내가 사용해야 할 태그는 ```div 태그```에 class ```sammy``` 이거나 ```sammyListing``` 일 것이다"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**우선, 전체 html 코드를 불러오기**"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.108954Z",
"start_time": "2020-05-28T00:14:24.523886Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"<!DOCTYPE html>\n",
"\n",
"<html lang=\"en\">\n",
"<head>\n",
"<!-- Urbis magnitudo. Fabulas magnitudo. -->\n",
"<meta charset=\"utf-8\"/>\n",
"<style>a.edit_from_site {display: none !important;}</style>\n",
"<title>\n",
" The 50 Best Sandwiches in Chicago |\n",
" Chicago magazine\n",
" | November 2012\n",
" </title>\n",
"<meta content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable = no\" name=\"viewport\">\n",
"<meta content=\"Our list of Chicago’s 50 best sandwiches, ranked in order of deliciousness\" name=\"description\"/>\n",
"<!-- <meta name=\"description\" content=\"Our list of Chicago’s 50 best sandwiches, ranked in order of deliciousness\"> -->\n",
"<meta content=\"sandwiches, dining\" name=\"keywords\"/>\n",
"<meta content=\"37873197144\" property=\"fb:pages\">\n",
"<link href=\"//www.googletagservices.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//ajax.googleapis.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//securepubads.g.doubleclick.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//media.chicagomag.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//ox-d.godengo.com/\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.google-analytics.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//ping.chartbeat.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//static.chartbeat.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.google.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//cse.google.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.googleapis.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//maps.googleapis.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//csi.gstatic.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.facebook.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//staticxx.facebook.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//connect.facebook.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//contentz.mkt51.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.pages05.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//fbcdn.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//players.brightcove.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//edge.api.brightcove.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//metrics.brightcove.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//c.brightcove.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//pvp.trb.com\" rel=\"dns-prefetch\"/>\n",
"<!-- For Citi sponsorship (move these to above ^^ links after Nov 2018) -->\n",
"<!-- -->\n",
"<!-- DOES NOT HAVE REAL ESTATE CATEGORY OR IS NOT REAL ESTATE HOMEPAGE -->\n",
"<link href=\"//chicagomag.disqus.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.disqus.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//a.disquscdn.com\" rel=\"dns-prefetch\"/>\n",
"<!-- -->\n",
"<link href=\"https://use.typekit.net/vdh5vgk.css\" rel=\"stylesheet\"/>\n",
"<meta content=\"www.pages05.net,chicagomag.com\" name=\"com.silverpop.brandeddomains\">\n",
"<script>\n",
"(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n",
"(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n",
"m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n",
"})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n",
"\n",
"ga('create', 'UA-297666-1', {'siteSpeedSampleRate': 100});\n",
"\n",
"\n",
"\n",
"ga('set', 'dimension1', 'restaurant')\n",
"\n",
"\n",
"\n",
" ga('set', 'dimension4', '2012-10-09 18:12:00');\n",
"\n",
" ga('set', 'dimension5', 'article.tpl');\n",
"\n",
"ga('send', 'pageview');\n",
"\n",
"\n",
"var trackOutboundLink = function(url) {\n",
" ga('send', 'event', 'outbound', 'click', url, {\n",
" 'transport': 'beacon',\n",
" 'hitCallback': function(){document.location = url;}\n",
" });\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"</script>\n",
"<link href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" rel=\"canonical\">\n",
"<meta content=\"The 50 Best Sandwiches in Chicago\" name=\"title\"/>\n",
"<meta content=\"all\" name=\"robots\"/>\n",
"<meta content=\"sandwiches, dining\" name=\"news_keywords\"/>\n",
"<!-- -->\n",
"<link href=\"/images/cache/cache_2/cache_9/cache_3/sandwich-old-oak-08ecb392.jpeg?ver=1482330047&amp;aspectratio=1.5\" rel=\"image_src\">\n",
"<meta content=\"/images/cache/cache_2/cache_9/cache_3/sandwich-old-oak-08ecb392.jpeg?ver=1482330047&amp;aspectratio=1.5\" name=\"thumbnail\"/>\n",
"<script type=\"text/javascript\">var _sf_startpt=(new Date()).getTime()</script>\n",
"<link href=\"http://media.chicagomag.com/favicon.ico\" rel=\"shortcut icon\"/>\n",
"<!-- Global site tag (gtag.js) - Google Ads: 754499588 -->\n",
"<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-754499588\"></script>\n",
"<script>\n",
" window.dataLayer = window.dataLayer || [];\n",
" function gtag(){dataLayer.push(arguments);}\n",
" gtag('js', new Date());\n",
"\n",
" gtag('config', 'AW-754499588');\n",
"</script>\n",
"<style>\n",
" .ad { z-index: 9999999 !important; }\n",
"</style>\n",
"<meta content=\"summary_large_image\" name=\"twitter:card\"/>\n",
"<meta content=\"/images/cache/cache_4/cache_a/cache_0/sandwich-old-oak-c8b2a0a4.jpeg?ver=1482330047&amp;aspectratio=1.5\" name=\"twitter:image\"/>\n",
"<meta content=\"/images/cache/cache_b/cache_7/cache_4/sandwich-old-oak-bc2dc47b.jpeg?ver=1482330047&amp;aspectratio=1.5\" property=\"og:image\"/>\n",
"<meta content=\"Chicago magazine\" name=\"twitter:app:name:ipad\"/>\n",
"<meta content=\"567851357\" name=\"twitter:app:id:ipad\"/>\n",
"<meta content=\"Chicago magazine\" name=\"twitter:app:name:googleplay\"/>\n",
"<meta content=\"com.chicagomag.chicagomag\" name=\"twitter:app:id:googleplay\"/>\n",
"<meta content=\"The 50 Best Sandwiches in Chicago\" property=\"og:title\">\n",
"<meta content=\"The 50 Best Sandwiches in Chicago\" name=\"twitter:title\">\n",
"<meta content=\"article\" property=\"og:type\">\n",
"<meta content=\"bikesarefun\" property=\"fb:admins\">\n",
"<meta content=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" property=\"og:url\">\n",
"<meta content=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" name=\"twitter:url\">\n",
"<meta content=\"Chicago magazine\" property=\"og:site_name\">\n",
"<meta content=\"Our list of Chicago’s 50 best sandwiches, ranked in order of deliciousness\" property=\"og:description\"/>\n",
"<meta content=\"Our list of Chicago’s 50 best sandwiches, ranked in order of deliciousness\" name=\"twitter:description\"/>\n",
"<meta content=\"@chicagomag\" name=\"twitter:site\"/>\n",
"<script type=\"text/javascript\">\n",
" var articleID = '19493';\n",
" var adcat = \"restaurant\";\n",
"\n",
" // Set the video variables\n",
" var videoID = \"Inside Best Restaurants\";// Fallback\n",
" \n",
" // adcat: restaurant\n",
" var videoID = \"Inside Best Restaurants\";\n",
" \n",
" \n",
"</script>\n",
"<script type=\"text/javascript\">\n",
"\n",
" // Asynchronous\n",
" var googletag = googletag || {};\n",
" googletag.cmd = googletag.cmd || [];\n",
"\n",
" // Set some global variables so we can refresh these slots asynchronously\n",
" var cube2 = '',\n",
" leaderboard1 = '',\n",
" leaderboard6 = '';\n",
" (function() {\n",
" var gads = document.createElement(\"script\");\n",
" gads.async = true;\n",
" gads.type = \"text/javascript\";\n",
" var useSSL = \"https:\" == document.location.protocol;\n",
" gads.src = (useSSL ? \"https:\" : \"http:\") + \"//www.googletagservices.com/tag/js/gpt.js\";\n",
" var node =document.getElementsByTagName(\"script\")[0];\n",
" node.parentNode.insertBefore(gads, node);\n",
" })();\n",
"\n",
"</script>\n",
"<script type=\"text/javascript\">\n",
" googletag.cmd.push(function() {\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" cube2 = googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-3').setTargeting('pos',['3']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-4').setTargeting('pos',['4']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-5').setTargeting('pos',['5']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-6').setTargeting('pos',['6']).addService(googletag.pubads());\n",
"\n",
" if (window.innerWidth > 727) {\n",
" leaderboard1 = googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-3').setTargeting('pos',['3']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-4').setTargeting('pos',['4']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-5').setTargeting('pos',['5']).addService(googletag.pubads());\n",
" leaderboard6 = googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-6').setTargeting('pos',['6']).addService(googletag.pubads());\n",
" }\n",
" else {\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[320,50]],'div-gpt-ad-mobile-leaderboard-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[320,50]],'div-gpt-ad-mobile-leaderboard-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" }\n",
"\n",
" // googletag.defineSlot('/4011/trb.chicagomag/hp', [[160,600]],'div-gpt-ad-999449422057474470-6').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" // googletag.defineSlot('/4011/trb.chicagomag/hp', [[160,600]],'div-gpt-ad-999449422057474470-7').setTargeting('pos',['2']).addService(googletag.pubads());\n",
"\n",
" if (window.innerWidth > 599) {\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,100]],'div-gpt-ad-600-100').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,400]],'div-gpt-ad-600-400-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,400]],'div-gpt-ad-600-400-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,400]],'div-gpt-ad-600-400-3').setTargeting('pos',['3']).addService(googletag.pubads());\n",
" }\n",
"\n",
"\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[336,392]],'div-gpt-ad-999449422057474470-9').setTargeting('pos',['1']).addService(googletag.pubads());\n",
"\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,100]],'div-gpt-ad-video-companion').addService(googletag.pubads());\n",
"\n",
" googletag.defineOutOfPageSlot('/4011/trb.chicagomag/hp', 'div-out-of-page').addService(googletag.pubads());\n",
"\n",
" // Custom chicago mag targeting\n",
"\n",
" googletag.pubads().setTargeting(\"adcat\", \"restaurant\");\n",
" googletag.pubads().setTargeting(\"pub\", \"chi\");\n",
" googletag.pubads().setTargeting(\"pubID\", \"100\");\n",
" googletag.pubads().setTargeting(\"videoID\", videoID);\n",
" googletag.pubads().collapseEmptyDivs();\n",
" \n",
" googletag.pubads().setTargeting(\"articleID\", \"19493\");\n",
" \n",
" googletag.pubads().setTargeting(\"articleTag\", \"602\"); \n",
" googletag.pubads().setTargeting(\"articleTag\", \"608\"); \n",
" googletag.pubads().setTargeting(\"articleTag\", \"636\"); \n",
" googletag.pubads().setTargeting(\"articleTag\", \"286\"); \n",
" \n",
" googletag.enableServices();\n",
"\n",
" });// End googletag.cmd.push()\n",
"\n",
"</script>\n",
"<!-- End: GPT -->\n",
"<link href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" rel=\"standout\">\n",
"<!-- responsive -->\n",
"<script language=\"Javascript\" src=\"//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js\" type=\"text/javascript\"></script>\n",
"<script type=\"text/javascript\">\n",
"if (typeof jQuery == 'undefined') {\n",
"\tdocument.write(unescape(\"%3Cscript src='/core/media/js/jquery-1.8.1.min.js' type='text/javascript'%3E%3C/script%3E\"));\n",
"}\n",
"</script>\n",
"<script type=\"text/javascript\">\n",
"var rjQuery = jQuery.noConflict(); // leave the $ variable alone\n",
"</script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/site-search.js?ver=1386069772\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/core/media/js/base.js?ver=1473876728\" type=\"text/javascript\"></script>\n",
"<!--[if lt IE 9]>\n",
"<script type=\"text/javascript\" language=\"JavaScript\" src=\"/core/media/themes/Respond/js/html5_shiv.js?ver=1473876729\"></script>\n",
"<![endif]-->\n",
"<script language=\"JavaScript\" src=\"/core/media/js/jquery.browser.js?ver=1473876728\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/jquery.iframe-auto-height.plugin.1.8.0.js?ver=1446756854\" type=\"text/javascript\"></script>\n",
"<link href=\"/lessc/35a3627424516b7ccf4314a41b92358c.one.css?ver=1540232190\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<link href=\"/lessc/35a3627424516b7ccf4314a41b92358c.two.css?ver=1540232190\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/functions.js?ver=1483891934\" type=\"text/javascript\"></script>\n",
"<link href=\"/core/media/css/responsive_ads.css?ver=1473876728\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<link href=\"/theme_overrides/Respond/css/sandwiches.css?ver=1473559134\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<!--[if IE 9]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/core/media/themes/Respond/css/ie9.css?ver=1473876729\">\n",
"<![endif]-->\n",
"<!--[if lt IE 9]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/core/media/themes/Respond/css/ie8.css?ver=1473876729\">\n",
"<![endif]-->\n",
"<script type=\"text/javascript\">RivistaJSString.put({\n",
"\n",
"\n",
"\n",
"\n",
"\"_\":\"\"});</script>\n",
"<!--[if lt IE 9]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/theme_overrides/Respond/css/chimag-ie8.css?ver=1443881828\">\n",
"<![endif]-->\n",
"<!--[if gt IE 7]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/theme_overrides/Respond/css/chimag-ie.css?ver=1381349768\">\n",
"<![endif]-->\n",
"<script>\n",
"var ad_category = \"Restaurants and Bars\";\n",
"</script>\n",
"<link href=\"http://www.chicagomag.com/feeds/Chicago+magazine%3A+Dining+and+Drinking\" rel=\"alternate\" title=\" Chicago magazine: Dining and Drinking Feed\" type=\"application/atom+xml\">\n",
"<script>\n",
"window.editorIdMap = new Object;\n",
"editorIdMap['120'] = {'mid': 1425,'view': 'edit_report'};\n",
"editorIdMap['120'] = {'mid': 1426,'view': 'edit_report'};\n",
"editorIdMap['122'] = {'mid': 1431,'view': 'edit_gateway'};\n",
"editorIdMap['77'] = {'mid': 1350,'view': 'edit_config'};\n",
"editorIdMap['11'] = {'mid': 1387,'view': 'edit_user'};\n",
"editorIdMap['80'] = {'mid': 1423,'view': ''};\n",
"editorIdMap['80'] = {'mid': 1421,'view': ''};\n",
"editorIdMap['60'] = {'mid': 1328,'view': ''};\n",
"editorIdMap['60'] = {'mid': 1327,'view': ''};\n",
"editorIdMap['136'] = {'mid': 1491,'view': 'edit_comment'};\n",
"editorIdMap['60'] = {'mid': 1322,'view': ''};\n",
"editorIdMap['138'] = {'mid': 1492,'view': ''};\n",
"editorIdMap['133'] = {'mid': 1488,'view': ''};\n",
"editorIdMap['19'] = {'mid': 81,'view': 'edit_moduledefinition'};\n",
"editorIdMap['21'] = {'mid': 694,'view': 'edit_module'};\n",
"editorIdMap['16'] = {'mid': 1386,'view': 'edit_group'};\n",
"editorIdMap['128'] = {'mid': 1479,'view': 'edit_issueperiod'};\n",
"editorIdMap['79'] = {'mid': 1333,'view': 'edit_publication'};\n",
"editorIdMap['78'] = {'mid': 1334,'view': 'edit_issue'};\n",
"editorIdMap['97'] = {'mid': 1357,'view': 'edit_content'};\n",
"editorIdMap['94'] = {'mid': 1388,'view': ''};\n",
"editorIdMap['17'] = {'mid': 1389,'view': 'edit_menu'};\n",
"editorIdMap['72'] = {'mid': 1422,'view': 'edit_product'};\n",
"editorIdMap['2'] = {'mid': 1332,'view': ''};\n",
"editorIdMap['2'] = {'mid': 1339,'view': ''};\n",
"editorIdMap['60'] = {'mid': 1329,'view': ''};\n",
"editorIdMap['98'] = {'mid': 1336,'view': 'edit_survey'};\n",
"editorIdMap['85'] = {'mid': 1338,'view': 'edit_newsletter'};\n",
"editorIdMap['86'] = {'mid': 1337,'view': 'edit_gallery'};\n",
"editorIdMap['123'] = {'mid': 1473,'view': 'edit_calendar'};\n",
"editorIdMap['140'] = {'mid': 1493,'view': 'edit_menu'};\n",
"editorIdMap['116'] = {'mid': 1406,'view': 'edit_wrapper'};\n",
"editorIdMap['118'] = {'mid': 1419,'view': 'edit_form'};\n",
"editorIdMap['132'] = {'mid': 1489,'view': 'edit_geobase'};\n",
"editorIdMap['134'] = {'mid': 1490,'view': 'edit_videochannel'};\n",
"editorIdMap['130'] = {'mid': 1480,'view': 'edit_pageposition'};\n",
"editorIdMap['117'] = {'mid': 1418,'view': 'edit_campaign'};\n",
"editorIdMap['69'] = {'mid': 1424,'view': 'edit_category'};\n",
"editorIdMap['115'] = {'mid': 1335,'view': 'edit_page'};\n",
"editorIdMap['60'] = {'mid': 1325,'view': ''};\n",
"editorIdMap['121'] = {'mid': 1430,'view': 'edit_shipcarrier'};\n",
"editorIdMap['2'] = {'mid': 1340,'view': ''};\n",
"editorIdMap['144'] = {'mid': 1495,'view': 'edit_recurring'};\n",
"editorIdMap['146'] = {'mid': 1499,'view': 'edit_section'};\n",
"editorIdMap['148'] = {'mid': 1501,'view': ''};\n",
"editorIdMap['153'] = {'mid': 1505,'view': ''};\n",
"editorIdMap['154'] = {'mid': 1506,'view': ''};\n",
"editorIdMap['155'] = {'mid': 1507,'view': ''};\n",
"editorIdMap['115'] = {'mid': 1360,'view': 'edit_page'};\n",
"editorIdMap['126'] = {'mid': 1478,'view': 'edit_customtable'};\n",
"editorIdMap['147'] = {'mid': 1500,'view': ''};\n",
"editorIdMap['150'] = {'mid': 1502,'view': ''};\n",
"editorIdMap['149'] = {'mid': 1503,'view': ''};\n",
"editorIdMap['131'] = {'mid': 1481,'view': 'edit_tag'};\n",
"editorIdMap['145'] = {'mid': 1496,'view': 'edit_redirect'};\n",
"editorIdMap['143'] = {'mid': 1494,'view': 'edit_creditcardtype'};\n",
"editorIdMap['156'] = {'mid': 1510,'view': ''};\n",
"editorIdMap['119'] = {'mid': 1420,'view': 'edit_user'};\n",
"editorIdMap['126'] = {'mid': 1512,'view': 'edit_customtable'};\n",
"editorIdMap['158'] = {'mid': 1513,'view': ''};\n",
"editorIdMap['157'] = {'mid': 1511,'view': ''};\n",
"var pagetype = 'article';\n",
"var admin_edit_itemid = '19493';\n",
"var admin_edit_text = 'Edit Article';\n",
"var admin_edit_link_extras = '';\n",
"editorIdMap['article'] = {'mid': 1335,'view': 'edit_page'};\n",
"editorIdMap['content'] = {'mid': 1360,'view': 'edit_page'};\n",
"editorIdMap['cde'] = {'mid': 1512,'view': 'edit_customtable'};\n",
"editorIdMap['cde_record'] = {'mid': 1512,'view': 'edit_customdata'};\n",
"editorIdMap['evergreen'] = {'mid': 1335,'view': 'edit_page'};\n",
"editorIdMap['issue'] = {'mid': 1360,'view': 'edit_page'};\n",
"editorIdMap['publication'] = {'mid': 1360,'view': 'edit_page'};\n",
"</script>\n",
"<script src=\"/theme_overrides/Respond/js/edit_from_site.js?ver=1446828087\"></script><link href=\"/core/media/css/edit_from_site.css\" rel=\"stylesheet\" type=\"text/css\"/></link></link></meta></meta></meta></meta></meta></meta></meta></link></link></meta></meta></meta></head>\n",
"<body class=\"land long tpl-article din\" id=\"page_htmlid_19493\">\n",
"<script>\n",
" var timestamp = 'May%2027%202020%2019:14';\n",
"</script>\n",
"<style>\n",
"/*--- Mobile Reveal bar ---*/\n",
"#reveal-bar-mobile {\n",
" background: rgba(255,255,255,.95);\n",
" border-bottom: 1px solid #aaa;\n",
" display: none;\n",
" padding: 11px 10px 9px 0;\n",
" position: fixed;\n",
" width: 100%;\n",
" -webkit-transform: translate3d(0,-80px,0);\n",
" -moz-transform : translate3d(0,-80px,0);\n",
" -o-transform : translate3d(0,-80px,0);\n",
" -mstransform : translate3d(0,-80px,0);\n",
" transform : translate3d(0,-80px,0);\n",
" transition : 1s ease-in-out;\n",
" z-index : 99999;\n",
"}\n",
"#reveal-bar-mobile.reveal-bar-show {\n",
" -webkit-transform: translate3d(0,0,0);\n",
" -moz-transform: translate3d(0,0,0);\n",
" -o-transform: translate3d(0,0,0);\n",
" -mstransform: translate3d(0,0,0);\n",
" transform: translate3d(0,0,0);\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons {\n",
" float: right;\n",
" margin-right: 10px;\n",
" /*width: 72px;*/\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons li {\n",
" margin: 0 5px;\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons li a {\n",
" height: 30px;\n",
" width: 30px;\n",
" border-radius: 15px;\n",
" padding-top: 6px;\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons li i {\n",
" font-size: 18px;\n",
"}\n",
"\n",
"button#reveal-bar-mobile-sections-button {\n",
" background: none;\n",
" color: #666;\n",
" font-size: 16px;\n",
" font-style: normal;\n",
"\n",
" margin: 0;\n",
" padding: 8px 10px 5px;\n",
"}\n",
"\n",
".reveal-bar-mobile-section {\n",
" width: 100%;\n",
"}\n",
"\n",
".reveal-bar-mobile-section-link,\n",
".reveal-bar-mobile-section-link:hover,\n",
".reveal-bar-mobile-section-link:active,\n",
".reveal-bar-mobile-section-link:visited {\n",
" background: #222;\n",
" border-bottom: 1px solid #aaa;\n",
" -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;\n",
" color: #f0f0f0;\n",
" display: table-cell;\n",
" font-family: \"proxima-nova\",sans-serif;\n",
" font-size: 20px;\n",
" padding: 0 10px;\n",
" vertical-align: middle;\n",
" width: 100%;\n",
"}\n",
"..reveal-bar-mobile-section-link:on\n",
".reveal-bar-mobile-section-link.reveal-bar-mobile-section-link-close {\n",
" font-size: 16px;\n",
" font-weight: 100%;\n",
" padding-right: 20px;\n",
" /*text-align: right;*/\n",
" text-transform: uppercase;\n",
"}\n",
"\n",
"#reveal-bar-mobile-sections {\n",
" display: none;\n",
" position: fixed;\n",
" top: 20px;\n",
" -webkit-transform: translate3d(0,-800px,0);\n",
" -moz-transform : translate3d(0,-800px,0);\n",
" -o-transform : translate3d(0,-800px,0);\n",
" -mstransform : translate3d(0,-800px,0);\n",
" transform : translate3d(0,-800px,0);\n",
" transition : .5s ease-in-out;\n",
" width: 100%;\n",
" z-index: 998;\n",
"}\n",
"#reveal-bar-mobile-sections.show {\n",
" -webkit-transform: translate3d(0,0,0);\n",
" -moz-transform : translate3d(0,0,0);\n",
" -o-transform : translate3d(0,0,0);\n",
" -mstransform : translate3d(0,0,0);\n",
" transform : translate3d(0,0,0);\n",
"}\n",
"\n",
"@media only screen and (max-width : 450px) {\n",
" #reveal-bar-mobile {\n",
" display: block;\n",
" }\n",
"}\n",
"</style>\n",
"<div id=\"reveal-bar-mobile\">\n",
"<button id=\"reveal-bar-mobile-sections-button\">More →</button>\n",
"<ul class=\"reveal-share-buttons list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20mobile%20reveal%20bar%2019493%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event', 'Sharing', 'Facebook share from mobile reveal bar','The 50 Best Sandwiches in Chicago'); return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20mobile%20reveal%20bar%2019493%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=The+50+Best+Sandwiches+in+Chicago&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" onclick=\"ga('send', 'event', 'Sharing', 'Tweet story from mobile reveal bar','The 50 Best Sandwiches in Chicago'); return tweetPopup('The+50+Best+Sandwiches+in+Chicago','/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/','mobile+reveal+bar+19493');\" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"</ul>\n",
"</div>\n",
"<ul class=\"list-no-bullets\" id=\"reveal-bar-mobile-sections\">\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/dining-drinking\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Dining');\">Dining &amp; Drinking</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/city-life\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'City Life');\">Politics &amp; City Life</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/real-estate\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Real Estate');\">Real Estate</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/Chicago-Home\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Home and Garden');\">Home &amp; Garden</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/style-shopping\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Style Shopping');\">Style &amp; Shopping</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/video\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Video');\">Video</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link reveal-bar-mobile-section-link-close\" href=\"javascript:void(0);\" onclick=\"jQuery('#reveal-bar-mobile-sections').removeClass('show');\"><i class=\"icon-remove\"></i></a></li>\n",
"</ul>\n",
"<script>\n",
" var mobile_sections_el = jQuery('#reveal-bar-mobile-sections');\n",
" if (document.documentElement.clientWidth <= 400) {\n",
" mobile_sections_el.show();\n",
" }\n",
" mobile_sections_el.css('top',jQuery('#reveal-bar-mobile').outerHeight() - 1)\n",
" jQuery('.reveal-bar-mobile-section-link')\n",
" .height((jQuery(window).height() - jQuery('#reveal-bar-mobile').height() - 50) / 7 - 2)\n",
" .width(mobile_sections_el.width())\n",
" jQuery('#reveal-bar-mobile-sections-button').on('click', function(){\n",
" mobile_sections_el.toggleClass('show');\n",
" })\n",
"</script>\n",
"<div class=\"hidden-phone\" id=\"reveal-bar\">\n",
"<div class=\"container\">\n",
"<a class=\"logo background-logo-svg\" href=\"/\">Chicago magazine</a>\n",
"<div class=\"input-append\">\n",
"<form action=\"http://www.chicagomag.com/search?from=revealbar&amp;\" id=\"reveal-bar-search\" name=\"revealBarSearch\"><input class=\"text clean\" id=\"reveal-bar-input\" name=\"q\" placeholder=\"Search\" type=\"text\"/>\n",
"<button id=\"reveal-bar-button\"><i class=\"icon-search\"></i></button>\n",
"</form>\n",
"</div>\n",
"<div id=\"article-reveal-share\">\n",
"<span class=\"article-reveal-share-intro\">Share this story</span>\n",
"<ul class=\"reveal-share-buttons list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20reveal%20bar%2019493%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event','Sharing', 'Facebook share from reveal bar','The 50 Best Sandwiches in Chicago'); return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20share%20reveal%20bar%2019493%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=The+50+Best+Sandwiches+in+Chicago&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" onclick=\"ga('send', 'event','Sharing', 'Tweet story from reveal bar','The 50 Best Sandwiches in Chicago'); return tweetPopup('The+50+Best+Sandwiches+in+Chicago','/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/','reveal+bar+19493');\" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"<li class=\"eml\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-Chicago%2Findex.php&amp;mode=email','emailThisPage','status=no,scrollbars=yes,resizable=yes,width=420,height=540'); ga('send', \n",
" 'event','Sharing', 'Email story from reveal bar','The 50 Best Sandwiches in Chicago'); return false;\" url=\"email this page\"><i class=\"icon-envelope\"></i></a></li>\n",
"</ul>\n",
"</div>\n",
"</div>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"interstitial-newsletter\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style>\n",
" \n",
"\n",
"#cta-backdrop {\n",
" background: #fff;\n",
" opacity: .97;\n",
" display: none;\n",
"}\n",
".modal#cta-modal {\n",
" background: #eee;\n",
" margin-top: 0;\n",
" display: none;\n",
" box-shadow: 3px 3px 12px rgba(0,0,0,0.2);\n",
" overflow: auto;\n",
" border-top: 8px solid #000;\n",
"}\n",
".modal-close {\n",
" background:none;\n",
" color: #ff0000;\n",
" font-weight: 300;\n",
" font-size: 20px;\n",
" font-style: normal;\n",
" opacity: 1;\n",
" text-align: right;\n",
" width: 100%;\n",
"}\n",
".modal-close:hover {\n",
" background: none;\n",
" color: black;\n",
" opacity: 1;\n",
"}\n",
"#cta-modal p.cta-p {\n",
" color: #333 !important;\n",
" font-size: 18px;\n",
" line-height: normal;\n",
" text-align: center;\n",
" margin-bottom: 15px;\n",
"}\n",
".btn-nothanks, .btn-nothanks:hover {\n",
" border: none !important;\n",
" background: none !important;\n",
" color: #666 !important;\n",
"}\n",
"#cta-modal .modal-body {\n",
" padding: 30px;\n",
" height: auto;\n",
" max-height: none;\n",
"}\n",
"#cta-modal label {\n",
" color: #333;\n",
" text-align: center;\n",
" margin-top: 5px;\n",
" margin-bottom: 5px;\n",
"}\n",
"h2.cta-h2 {\n",
" font-size: 45px;\n",
" text-align: center;\n",
" margin-bottom: 10px;\n",
"}\n",
"#cta-modal .btn-large {\n",
" width: 200px;\n",
" -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;\n",
"}\n",
".cta-buttons {\n",
" width: 200px;\n",
" margin: 15px auto 0;\n",
"}\n",
"#cta-form {\n",
" /*text-align: center;*/\n",
" width: 200px;\n",
" margin: 10px auto;\n",
"}\n",
"#cta-form input[type=text] {\n",
" -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;\n",
" height: 40px;\n",
" width: 200px;\n",
"}\n",
".cta-neveragain {\n",
" text-align: right;\n",
" font-size: 10px;\n",
" text-transform: uppercase;\n",
" text-decoration: none;\n",
"}\n",
".cta-neveragain a {\n",
" color: #999;\n",
"}\n",
".cta-neveragain a:hover {\n",
" color: #666;\n",
"}\n",
"#cta-newsletters-outer {\n",
" max-width: 300px;\n",
" margin: 0 auto;\n",
"}\n",
"a.cta-checkbox {\n",
" padding-left: 25px;\n",
" padding-bottom: 10px;\n",
" background-repeat: no-repeat;\n",
" background-position: 0 2px;\n",
" background-image: url('http://media.chicagomag.com/img/checkbox-check.png');\n",
" cursor: pointer;\n",
" color: #000;\n",
" display: block;\n",
" font-size: 16px;\n",
" margin-bottom: 5px;\n",
" transition: none;\n",
"}\n",
"a.cta-checkbox:hover {\n",
" color: #ff0000;\n",
"}\n",
"a.cta-checkbox-yes {\n",
" background-position: 0px -83px;\n",
" color: #666;\n",
"}\n",
"a.cta-checkbox-yes:hover {\n",
" color: #666;\n",
"}\n",
"#cta-modal .form-error {\n",
" margin-bottom: 15px;\n",
"}\n",
"#cta-modal .checkbox input[type=\"checkbox\"] {\n",
" /*top: 7px;*/\n",
" margin-left: initial;\n",
"}\n",
"\n",
"@media screen and (max-width: 420px) {\n",
" .modal#cta-modal {\n",
" border-top: none;\n",
" }\n",
" #cta-modal .modal-body {\n",
" padding: 8px;\n",
" }\n",
" h2.cta-h2 {\n",
" font-size: 30px;\n",
" }\n",
" a.cta-checkbox {\n",
" padding-bottom: 3px;\n",
" }\n",
"}\n",
"\n",
"\n",
"@media screen and (min-width: 420px) {\n",
" .modal#cta-modal {\n",
" /*Logo, 300x60, #eee background*/\n",
" background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABQCAMAAACUNLhJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutQTFRF7+7uIx8gwcHD6urqJiIj7Ovr5eTl5uXl1tbXTExOSEhKiYqN7ezs2dnZcnN1SkpMTU1PKCUmmpud4uLidXZ4t7i6l5ia5OPjjpCS2trb6OjoRERGJCEiQkFDOTg6JyQl4ODhzc7PKSYn5+bmnZ6ghYeJ5eTkNTM1lJaY4eHhKygp1tXWyMnKzMzOmJmbnZ+hl5mbfX+B0NDRvr/A6enp39/f0tLSp6iqm5yeRkZIUlNVQ0JELCkqQUBC5+fn3NzdQ0NF1NTVu7y+0dHSp6mrq62uy8zNSUlLiImL1tfXq6uts7S1xsbHhIaI29vcubq7nJ2fn6CjWlteLSssjY+RUlJUNzY3wsLD19fYlJWY4+PjODc4Pz5AuLm7cHF0yMjJ3t7fPDs8qaqssbK0fX6Azs/Q3d3esLGzkZOVTk5QwsPET09Rr7Gyx8fJV1haU1RWcXJ0q6yu1dXVzM3OrK2v09LT4+PiwMHCVVVXiIqMkZKVr7CyqqutxMTGra6w3d3doKKkVFVWo6SmXV5gMzEyamttb3Bylpea2draysvMY2Nl2NjZpaepRUVHh4iKqKqsLy0vmZqcycrLxsfIrq+xu72+Pj0+oKGjhoeKtre4R0dJlZeZQD9BpKaokpSWdHV3uru9X2Fji4yOycnLZmdpv8DBsrO1WltdVldZYGFk09PUUVFTjY6QnqCiWVpctLW3uru8goSGUFBSfn+Cg4SHOjk7eHp8ZWZpe31/X2BiLiwtSktNpKWnz8/Rdnd6kJGUbG1wgIGDPTw9S0xOjI2PoqSms7S24ODgMTAxpqepbG1vbm9xaGpsxcXGgIKEj5GTk5SXgYOFt7i5NjU2tba4dXd5MC8wg4WHd3h6Xl9ha2xui42PYWJkgIKFvr7AZGVneXp9eHl7bW5xaGlrW1xeVVZYvb7AWFlbw8TFYmJkcnR2XF1fiouNc3V3f4CCoaOlZGRmZ2hqc3R3b3FzNDIzent9vL2/e3x+aWptop1pYQAADf1JREFUeNrsW2dYU8kanhBiVIJKKIkYJUKAoPQioAJSpUhTkCZiBwULKBZEFFCx9y5i77p2V117W1d37W1t23svt/y85wQyM6cfDD73uZe8vzhnvsx8552Zr80AgBlmmGGGGWaYYYYZZphhhhlmmGGGGWaYYYYZZpjx34DLmFVHa9TJx+L1iWtHfyg1vlZIZQZIZcJdyIyyCtbm3J4Whd5Wx55l6JJmJag4e2kcUXg0x2FeUTENGx4kq3VJWWUeCj7ZwKDRa2OKXB9YKZMGWLcxmSu372N2nLk9MPP49O2T/C5VxRk1L/fqboBXdCCT36mqRrgZuHWMNsr2YvvWtvbKY3aLvjl+cO+ui8m6bRFcmvhP7t59cndHwcktSDw0av6nE4szB+66eHJlkj/fLK6KvTTqTm3v4n2fXXRdH2Br2qpKvVt9SoLBKWx/gz/5xfKBYV0NCPtpAf1X0g0HexuQWe1JPidA2b2MyUvwedF+BT7C3HZbS9zYdHnTxdDHb/wKRz2bsE6D99e336tLO1lXl8Lzeu0QS0z00cETRx3fliprn314X0YMqiDJ2mR87LKYQdZtKBtAPvfsanwMpZH1id9glgE0mV5MZaTzGhunu3Er3Dl9ghNLf5Jzt+MYsvLHL3owJZ2+XhL0NlSp1mdK2PEjMVHyTsanjtaM7+pgbLO0MOyz9sbndhSyVp1ewTHCt0x1AuY2Njkv51xVNdUSLoTQhb+dxyVaO7P5XI37lHPkUaAlyFIoh3AN4Dyeqc8oY+MujqXV/SsJNz6iytq6unPL9njSs5lcpQ/m7u1kS5CVPYl7gL6jGfpcGA77jGJVeE8/Hq4kU6iuYr+EF2OzmkOV4w6+vtQtQNbob3gGmMuc2uuo9S82jdev4NPYMgmXnfWBRADr9jSDLDVvVz6mkxWZyTdA2DB6l0F9sG3yCVPhj5x5NbZMxWTjQiWCcD8qmqs5tJ8+uvbd2e2134ytP2d4DDaZLNvtNP/XtfdP288OnNixcfMfd6F3qcSlOzAigSP0dbWumND40wnFYYMMjzYWSDZlOlXUpkt17f6BxVepb5cuFMlVFsX6Of3bNyCFCD8U8qCFj/VDCascaypZgVcoivXzK52sIoK3QFX2tOXJX1tK3qPHuVrKB7oPoDX3otqr/idGFGhJjV20XkcchoYRixHFIvKhFNlOJ2f6t1EAqXb1lq0UM71XK4orj+/wH328luLupf7eEwtNJavEBhvg1L1yyq+HBTyZRw8Nl1Pjvde06PJLvLFLCNXiSaPXT3eKRMYNl613SMAkd57Bw1lXUWT54qZ2JTNByfUwkazcYmyEgZ5MDWbTBg1/n7pH6qMpzVU4989Z/L7teZhD9WyPye6ie92ZXbD1u1sEV4v7Y7OexCVlClkrMX0vR4hQKaoHiz+GmPoKi9DuC3SVgfXyxIPRvBCbxw4uwprpML/DHcyaQJYW84Q/eIhZ60MZ7nI21roR26NFAj2lYIHwHbYqw2S0tvp+L6iYtBZ1ZwXeBVkj0Tq56imGq7i+DNfujTWfRq+HNsPPd0xglViDgpANgvWgVUizg2PEkHWNmXna8ZJ1TPxCaAT0nYv2Gf+ajnzVsHoUMEwWKqyhlMj5BrtIuB3yqpEC3bXBDIoOiCGr381ZFhSMm/YZH1lB78EBQkW552hYtMi/AeOZYNj8uBkOLBJtsvfkHDIWMHDSxAp01xalbKHZosiSONnQoeEjK+5v+MuXohZWBYyJPCJhKPQ7/NZDyH9ZCHVVgvaYklMIud4TAt1ZTEDeAIgjiy/NYCHrJvIf08RwlTLWKL8MBP4Jd5G9sf1L4cXCEhXNPcApFAKF9gt0F9Oe1Yi2IFmHkYnNFkMW3Hp/E50lwuLeC2POj2bXD3cyszvTYE04Xj8oO0HKOWABXH79BVQ7lCdQCjGZrHiUHIg5IXCBmc4iIiUcA5eZU1MZRQvfSPS4ofvAvRsVg/yAAsUg/+IeMQIW0pcK6HZmEEwwPd8NWSdg60UxC6sEis8hH5Pho11TSA7r25IYvP6Vx1DmFxD4Aj7M4Pk0SH+ogG5PnHkqcC1CFix5Sv4hgisZNLdXDbH+apjaDG9Mji/AJNryCF7fG85Qxg6Ef8yeA9DCxL1iyfoCRow9vN41WadFkJUEw774RvJ+oC2OaBgNaNYIkeWICu87uIcM7y2WrOS5cBvOejdkoZi0g/CJqcuP0H011eW3oJKTIWVegMqeaUJkKebDh7vcYwaFiSVLCSU1ieLICqvcZk9B6sbtfGTdR65+mCBZA6AJvd1Utmm7FP7e13AIlclqh1jJAl/Ah0XcExV9zii0SUA7++Owv2RxZLXTNi/dqYQDdBstSBb0Bpbnja9+RekImYUr0CnUV/hZjzMbWRUoK+WeqClQaJ+AdpMXoUpTG1FkNTeR3o3OQYOFuCp/ZBT9oDOczhWUwwDwOaq4YoFmyoZRfiTuPs/DyEJFRE0Jd0AAO9wqoN6HrlB0xTYgxr82lyzM1/8hRFY8W9p3Fr7MHEMpz1vOYbNA0zGyCoYLFyiwep5SqEKDFqHkcx65qf3flqw2yCU5C+Q7neEPbaaU92pC2TOkIbk3s9BK/YGlXJcyESPLDZYtJHkDBOt5c1cLTWYEIv9WKreYbb+3rmfp0cd+puLVJQRl5F37GNEPM92vphIWHvllzRJmHwt641GsFVYIDWcdMwEtrMtTBW0qVksby5282XZ5a7I88yRiYkMik9krFJo4bSTEZmAnYN0FyFqICo+W7JtsK+otVpArEIWV/xfNfgdkgTtYIHZYVKbDiY8p4QWRH/fkJwvMxy4JsFwxkSErKakeI0yW2zyBsxeTyQrApqOHmrOuIl0kTJbzbiJw/QV7UW3BZ7OIsZ8i2aeMtaV9jc2jj5jUddst/GjXm34dLvBojItpZIGL+PfumkY/YJ6dbjigj7IUkSNMIgnAD4XzGqhl7rJrFLJkfvhB+FZKHVqxrRa/eiTu1uSvFHWOO8TlGltUbY+q9zrNl5pIVnk95YrPl2uyjdUlaZBX8Bf1koesZzpsGEw6tQeUV+3qLhj9htto5UQNtUxRRrkV4v7a4kOj6z0yCQ9kz40Td3wfMZF2S+L3K/d16bq6Q5+/b5im5yZuQwBqaPF1p6FWKw/7KBtcJ/2UZ6xVjR8shixDABZxkPru1K6Tel16SM7rP9ZRI3gSI6lnRc5nr/j+VpNe8Zx2E65O7MUQT967TobLbKaRhdtRNktUQKlc8aIPadJnDREhacdy4s4JP6noazRRvIOfNJksoLjCN8AgImmMRBO2z4EOPTabOWR/+afEkwWKhI3haTkQjyy+CkyG6WSBwB0a7gFuRQJQhx7XMPW7h1pDDQb9zSbxZIGQW/ySGtfmXYk/cJm7r7QWIAuASu47ZUMigAc6OBnbmaneQnf65drJ+8WTBY7yVuPyzoNmwtGnP1dnW1qELBBp95RjgGtuIF3CWy53xILLiY1Zia36qmiyQIprN04bsDUONB8J9zj4H0Ehqz8PWZpGsjaxX+0G+ZP6sg6QKVOhY2t3Vh++BKXPNsaryKv92B3o5fksBZfvz7BeWNbMuwneDglp+wfRe7Op1pMnBx5wZpYyLlgE3qFeaI+EF0L70K5lSwPuhjKsrfukVKx4LHnF6pesMRu1HZYfd85oZ0NfKO9XtlloyEb/pAW/Bcv60//FoJtdqhy8NaRePqcndByywsZS49S3W+jx+RVZjb255CyzMsC1jvEfL7LKZ41t8VZlhhrZZtfG52UOzP/20ObvuFy8dHAPJ42lzdP6jgNHBfckPqrygVUTlnEcXya6QomX2NrO3V0x/2Bot75Ed86Dl/b+URknI3xvlVKn82bWUDzWvpxX3OWRM/Fx54Z0/PpE4mJgKsKzV9mvKS2tShp3wAO8E2jLp+2Zkhg7M3+VtbQFurM9MG5PVWJs4e7yXBFjR78pjC2terzTWgbM+L+CYS0ZC3G5Y7RNE2zY7eFyuVwlJ20N/EdDmZtc7tjaOJrSdPU/hsyEp+oMhbMxSd5FdZVeJDmdlSR/G0N85myJyfXcKJ96mPAj2j09QYFu/Ur7VrZjZOd9DbW11Rnkf9mN9yXjA+vNVsH/rMqoIclKTSOjHYvYksPLHjquafDQKkeEgwXq8cB+Q3BplqKVbb4k8uvBYt8tswhvlbhheTiQ3vh5FWmeyVBEPif5SOPymVk3DIz0trUdsTkKBCk9gX2RW6uzVIqSv9RrgTz4ZLwnANm+ys1tQXTRSHRGmuOtNByD+qvzAUGWh1vIMe+2KoKsbRW7B5S1NrKmvFyT0StVXXh/PABROSnKm2DAdX/iPQEZcAxOs75H3rVwHJGjIsmydVMeqZkz28cTvNns0LCxtZEVqw5Kz/jZPvvSeKByKAH2l6SrD3mBwErd4ZoRqojrs8AIJbEPo+NJk0aS5RuwIOejtJ0gX12matPqyPoZRKp1uZGEzfbPqLH30S+0LloCFHuCE11DcqdlBNv7OJQB2fp0FyNZqWBavDoO5BdpW5/NKrVyBBaRIDpjNYipS1OmKZeAqhkj5TLpONcAxco0nTLEYSbYeWi8QioDhb62bg4biT2ZWADyK2ZLW1usrVjuaggt/a0KFidHSWWym9d7SYN3qEP0M2Jl4+I9ZTJpjD7bR71ZqX8IZuZ4qBoKiThMvY0IHXw3F0pbGVtr5xj+qXDxlvLuPuTtl143LoCUmBy9fkkECAgmPeGA0jhdeogy5yGwmKJyKSWrPUvWgix9mr4w0Jz4/A/gPwIMAPwpG5QV/gbUAAAAAElFTkSuQmCC');\n",
" background-position: top center;\n",
" background-repeat: no-repeat;\n",
" background-size: 200px;\n",
" }\n",
" #cta-modal-content {\n",
" padding-top: 40px;\n",
" }\n",
"}\n",
"\n",
"\n",
" \n",
"</style>\n",
"<script>\n",
"var which = '';\n",
"</script>\n",
"<div aria-hidden=\"true\" class=\"modal-backdrop\" id=\"cta-backdrop\" style=\"display: none;\"></div>\n",
"<div class=\"modal\" id=\"cta-modal\" style=\"display: none;\">\n",
"<div class=\"modal-body\">\n",
"<button aria-hidden=\"true\" class=\"close modal-close cta-close\" data-dismiss=\"modal\" id=\"cta-close\" type=\"button\">X</button>\n",
"<div id=\"cta-modal-content\"></div>\n",
"</div><!--/.modal-body-->\n",
"</div><!--/.modal-->\n",
"<style>#print-only-logo {display: none;}</style>\n",
"<img alt=\"\" height=\"129\" id=\"print-only-logo\" src=\"http://media.chicagomag.com/img/chicagomag-logo-black-with-magazine.svg\" width=\"573\"/>\n",
"<!-- Temporary peeking refer — use sparingly, for last-minute promos sitewide. Also removes red \"punch\" from #global-nav-subscribe Subscribe button, so that this call to action is more defined. -->\n",
"<!-- \n",
"<style>\n",
"a#peek {\n",
" box-sizing: border-box;\n",
" display: block;\n",
" background: red;\n",
" height: 0;\n",
"\n",
" color: red;\n",
" text-align: center;\n",
" font-weight: 400;\n",
"}\n",
"\n",
"a#peek:hover {\n",
" color: white !important;\n",
" cursor: pointer;\n",
" cursor: hand;\n",
" background: #dd0000;\n",
"}\n",
"\n",
"a#peek.show {\n",
" height: 48px;\n",
" padding: 10px 5px;\n",
" border-bottom: 8px solid black;\n",
" color: white !important;\n",
"}\n",
"\n",
"#global-nav-subscribe {\n",
" background : none;\n",
" border-radius : 0 !important;\n",
" color : #aaa !important;\n",
" display : initial !important;\n",
" padding : initial !important;\n",
"}\n",
"\n",
"ul.member-nav li a#global-nav-subscribe:hover {\n",
" border-bottom: 1px solid #ff0000;\n",
" background: initial !important;\n",
"}\n",
"\n",
"@media (max-width: 767px) {\n",
" a#peek {\n",
" display: none;\n",
" }\n",
"}\n",
"\n",
"</style>\n",
" -->\n",
"<!-- \n",
"<a id=\"peek\" href=\"/Chicago-Magazine/Promotion/Secret-Supper/Purchase-Tickets/\" onclick=\"ga('send', 'event', 'Global nav', 'Top peeking refer');\">\n",
" Last call for Secret Supper tickets! Click here for more info.\n",
"</a>\n",
"\n",
" -->\n",
"<!-- slide down temporary peeking refer -->\n",
"<!-- \n",
"<script>\n",
"\n",
"jQuery( document ).ready(function() {\n",
" if (document.documentElement.clientWidth > 600) {\n",
" jQuery(\"#peek\").addClass(\"show\");\n",
" } else {\n",
" jQuery(\"#peek\").hide();\n",
" }\n",
"});\n",
"\n",
"</script>\n",
" -->\n",
"<style>\n",
" ul.sub {\n",
" z-index: 99999999 !important;\n",
" }\n",
"</style>\n",
"<header class=\"global\">\n",
"<nav>\n",
"<!--============================================\n",
" = Top part of global nav =\n",
" =============================================-->\n",
"<div class=\"top3\">\n",
"<div class=\"cell one\">\n",
"<a class=\"search-open\" href=\"javascript:;\"><i class=\"icon-search\"></i></a>\n",
"<div class=\"search\">\n",
"<gcse:searchbox-only></gcse:searchbox-only>\n",
"</div>\n",
"</div>\n",
"<div class=\"cell two\">\n",
"<h1 class=\"din land\">\n",
"<a href=\"/dining-drinking\">Dining<span class=\"new-amp\">&amp;</span>Drinking</a>\n",
"</h1>\n",
"<h1 class=\"dg land\">\n",
"<a href=\"/Chicago-Magazine/Dining/Dining-Guide/\">Chicago’s Best Restaurants</a>\n",
"</h1>\n",
"<h1 class=\"art land\">\n",
"<a href=\"/arts-culture\">Arts<span class=\"new-amp\">&amp;</span>Culture</a>\n",
"</h1>\n",
"<h1 class=\"pcl land\">\n",
"<!-- <a href=\"/city-life\">P<span style=\"display: inline-block; margin-right: 0px;\">o</span>litics<i class=\"amp\"><span>&amp;</span></i>City<span style=\"display: inline-block; margin-right: -2px;\">&nbsp; </span>Life<span style=\"display: inline-block; width: 12px;\"></span></a> -->\n",
"<a href=\"/city-life\">Politics<span class=\"new-amp\">&amp;</span>City Life</a>\n",
"</h1>\n",
"<h1 class=\"ren land\">\n",
"<a href=\"/real-estate\">Real Estate</a>\n",
"</h1>\n",
"<h1 class=\"sty land\">\n",
"<a href=\"/style-shopping\">Style<span class=\"new-amp\">&amp;</span>Shopping</a>\n",
"</h1>\n",
"<h1 class=\"hg land\">\n",
"<a href=\"/Chicago-Home\">Home Design</a>\n",
"</h1>\n",
"<h1 class=\"hel land\">\n",
"<a href=\"/Health-Wellness\">Health<span class=\"new-amp\">&amp;</span>Wellness</a>\n",
"</h1>\n",
"<h1 class=\"trv land\">\n",
"<a href=\"/travel\">Travel</a>\n",
"</h1>\n",
"<h1 class=\"vid land\">\n",
"<a href=\"/video\">Video</a>\n",
"</h1>\n",
"<h1 class=\"boc land\">\n",
"<a href=\"http://www.chicagomag.com/Chicago-Magazine/August-2019/Best-of-Chicago/\">Best of Chicago</a>\n",
"</h1>\n",
"<h1 class=\"mkt land\">\n",
"<a href=\"/Chicago-Magazine/Classifieds/\">Marketplace<span class=\"new-amp\">&amp;</span>Classifieds</a>\n",
"</h1>\n",
"<h1>\n",
"<a class=\"logo background-logo-svg\" href=\"/\" onclick=\"ga('send', 'event', 'Global nav', 'Home from main logo');\">Chicago</a>\n",
"</h1>\n",
"</div>\n",
"<div class=\"cell three\">\n",
"<ul class=\"member-nav\">\n",
"<li><a href=\"/subscribe\" id=\"global-nav-subscribe\" onclick=\"ga('send', 'event', 'Global nav', 'Subscribe');\">Subscribe</a>\n",
"<span class=\"red\">/</span>\n",
"<a href=\"/customerservice\" onclick=\"ga('send', 'event', 'Global nav', 'Customer Service');\">Customer Service</a></li>\n",
"<li><a href=\"/newsletters\" onclick=\"ga('send', 'event', 'Global nav', 'Newsletters');\">Newsletters</a> </li>\n",
"</ul>\n",
"</div>\n",
"</div>\n",
"<!--==== End of Top part of global nav ====-->\n",
"<!--=====================================\n",
" = Global nav menus =\n",
" ======================================-->\n",
"<ul id=\"page-nav\">\n",
"<li style=\"white-space: nowrap;\"><a class=\"pcl\" href=\"/city-life\" onclick=\"ga('send', 'event', 'Global nav', 'Politics and city life');\">Politics <span class=\"new-amp\">&amp;</span><br/> City Life</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Chicago-Magazine/September-2018/Best-Public-Schools/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Public Schools');\">Best Public Schools</a>\n",
"<li><a href=\"/Chicago-Magazine/September-2017/Best-Private-Schools/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Private Schools');\">Best Private Schools</a>\n",
"<!--<li><a href=\"/Chicago-Magazine/June-2017/Whos-Got-Next/\" onclick=\"ga('send', 'event', 'Global nav', 'Power 50');\">Emerging Power List</a>-->\n",
"<li><a href=\"/Chicago-Magazine/April-2019/Whos-Got-Next/\" onclick=\"ga('send', 'event', 'Global nav', 'Power 50');\">Emerging Power List</a>\n",
"<!-- <li><a href=\"/topdocs\" onclick=\"ga('send', 'event', 'Global nav', 'Top Docs');\">Top Docs</a></li> -->\n",
"<!-- <li><a href=\"/Chicago-Magazine/January-2017/Top-Cancer-Doctors/\" onclick=\"ga('send', 'event', 'Global nav', 'Top Cancer Docs');\">Top Cancer Docs</a></li> -->\n",
"<li><a href=\"/topic/?archive=crime-law\" onclick=\"ga('send', 'event', 'Global nav', 'Crime and Law');\">Crime &amp; Law</a></li>\n",
"<li><a href=\"/topic/?archive=politics\" onclick=\"ga('send', 'event', 'Global nav', 'Politics');\">Politics</a></li>\n",
"<li><a href=\"/topic/?archive=the-urbanist\" onclick=\"ga('send', 'event', 'Global nav', 'The Urbanist');\">The Urbanist</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Felsenthal-Files/\" onclick=\"ga('send', 'event', 'Global nav', 'Felsenthal');\" style=\"font-size: 13px; letter-spacing: -0.1px;\">Articles by Carol Felsenthal</a></li>\n",
"<!-- <li><a href=\"/topic/?archive=whet-moser\" onclick=\"ga('send', 'event', 'Global nav', 'Whet');\">Articles by Whet Moser</a></li> -->\n",
"</li></li></li></ul>\n",
"</li>\n",
"<!-- Dining & Drinking -->\n",
"<li><a class=\"din\" href=\"/dining-drinking\" onclick=\"ga('send', 'event', 'Global nav', 'Dining');\">Dining <span class=\"new-amp\">&amp;</span><br/> Drinking</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"http://www.chicagomag.com/secretsupper\" onclick=\"ga('send', 'event', 'Global nav', 'Secret Supper');\">Secret Supper</a></li>\n",
"<li><a href=\"/topic/?archive=restaurant-reviews\" onclick=\"ga('send', 'event', 'Global nav', 'Restaurant reviews');\">Restaurant Reviews</a></li>\n",
"<li><a href=\"/hotlist\" onclick=\"ga('send', 'event', 'Global nav', 'Hot list');\">The Hot List</a></li>\n",
"<li><a href=\"/brunch\" onclick=\"ga('send', 'event', 'Global nav', 'Brunch');\">Brunch</a></li>\n",
"<li><a href=\"/topic/?archive=bars-drinking\" onclick=\"ga('send', 'event', 'Global nav', 'Bars and drinking');\">Bars &amp; Drinking</a></li>\n",
"<li><a href=\"/Chicago-Magazine/February-2017/Best-Bars/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Bars');\">Best Bars</a>\n",
"<li><a href=\"/Chicago-Magazine/April-2019/Best-New-Restaurants/\" onclick=\"ga('send', 'event', 'Global nav', 'Best New Restaurants');\">Best New Restaurants</a></li>\n",
"<li><a href=\"/Chicago-Magazine/July-2010/Photos-Best-Pizzas-in-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Pizza');\">Best Pizzas</a></li>\n",
"<li><a href=\"/steakhouses\" onclick=\"ga('send', 'event', 'Global nav', 'Best steakhouses');\">Best Steakhouses</a></li>\n",
"<li><a href=\"/Chicago-Magazine/November-2014/Cheap-Eats-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', 'Best cheap eats');\">Best Cheap Eats</a></li>\n",
"<li><a href=\"/takeout\" onclick=\"ga('send', 'event', 'Global nav', 'Best takeout');\">Best Takeout</a></li>\n",
"<li><a href=\"/dining-drinking/July-2018/The-50-Best-Restaurants-in-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', '50 Best Restaurants');\">Chicago’s Best Restaurants</a>\n",
"<!-- <li><a href=\"/video/Inside-Chicagos-Best-Restaurants/\" onclick=\"ga('send', 'event', 'Global nav', 'Dining video series');\">Video: Inside Chicago’s Best Restaurants</a> -->\n",
"<!-- <li><a href=\"/video/Inside-Chicagos-Best-Bars/\" onclick=\"ga('send', 'event', 'Global nav', 'Dining video series bars');\">Video: Inside Chicago’s Best Bars</a> -->\n",
"<!-- <li><a href=\"http://www.chicagomag.com/video/In-the-Kitchen/\" onclick=\"ga('send', 'event', 'Global nav', 'Dining video series In Season');\">Video: In the Kitchen</a> -->\n",
"<li class=\"nav-sub-search clearfix\"><div class=\"margin-bottom-5\">Search Chicago’s Best Restaurants:</div>\n",
"<form action=\"/Chicago-Magazine/Dining/Dining-Guide/index.php?\" method=\"get\">\n",
"<input name=\"search\" type=\"text\"/>\n",
"<button onclick=\"ga('send', 'event', 'Global nav', 'Search Dining Guide');\">Go</button>\n",
"</form>\n",
"</li>\n",
"</li></li></ul>\n",
"</li>\n",
"<!-- Arts & Culture -->\n",
"<li><a class=\"art\" href=\"/arts-culture\" onclick=\"ga('send', 'event', 'Global nav', 'Arts');\">Arts <span class=\"new-amp\">&amp;</span><br> Culture</br></a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/go\" onclick=\"ga('send', 'event', 'Global nav', 'Go Listings');\">The Go Listings</a></li>\n",
"<li><a href=\"/topic/?archive=architecture\" onclick=\"ga('send', 'event', 'Global nav', 'Architecture');\">Architecture</a></li>\n",
"<li><a href=\"/topic/?archive=art\" onclick=\"ga('send', 'event', 'Global nav', 'Art');\">Art</a></li>\n",
"<li><a href=\"/topic/?archive=books\" onclick=\"ga('send', 'event', 'Global nav', 'Books');\">Books &amp; Readings</a></li>\n",
"<li><a href=\"/topic/?archive=comedy\" onclick=\"ga('send', 'event', 'Global nav', 'Comedy');\">Comedy</a></li>\n",
"<li><a href=\"/topic/?archive=dance\" onclick=\"ga('send', 'event', 'Global nav', 'Dance');\">Dance</a></li>\n",
"<li><a href=\"/topic/?archive=lollapalooza\" onclick=\"ga('send', 'event', 'Global nav', 'Lollapalooza');\">Lollapalooza</a></li>\n",
"<li><a href=\"/topic/?archive=pitchfork\" onclick=\"ga('send', 'event', 'Global nav', 'Pitchfork');\">Pitchfork </a></li>\n",
"<li><a href=\"/topic/?archive=museums\" onclick=\"ga('send', 'event', 'Global nav', 'Museums');\">Museums</a></li>\n",
"<li><a href=\"/topic/?archive=music\" onclick=\"ga('send', 'event', 'Global nav', 'Music');\">Music</a></li>\n",
"<!-- <li><a href=\"/summer-music-festivals/\" onclick=\"ga('send', 'event', 'Global nav', 'Summer music fests');\">Summer Music Festivals</a></li> -->\n",
"<li><a href=\"/topic/?archive=theater\" onclick=\"ga('send', 'event', 'Global nav', 'Theater');\">Theater</a></li>\n",
"<!-- <li><a href=\"/video/Inside-Chicagos-Best-Theater/\" onclick=\"ga('send', 'event', 'Global nav', 'Video Theater');\">Video: Inside Chicago’s Best Theater</a> -->\n",
"<!-- <li><a href=\"/video/In-the-Studio/\" onclick=\"ga('send', 'event', 'Global nav', 'Video Inside the Studio');\">Video: Inside the Studio</a></li> -->\n",
"</ul>\n",
"</li>\n",
"<!-- Real Estate -->\n",
"<li><a class=\"ren\" href=\"/real-estate\" onclick=\"ga('send', 'event', 'Global nav', 'Real Estate + Neighborhoods');\">Home <span class=\"new-amp\">&amp;</span><br/> Real Estate</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Chicago-Magazine/June-July-2019/Where-To-Buy-Now/\" onclick=\"ga('send', 'event', 'Global nav', 'Best neighborhoods');\">Where to Buy Now</a>\n",
"<li><a href=\"/Field-Guides\" onclick=\"ga('send', 'event', 'Global nav', 'Field Guides');\">Neighborhood Field Guides</a></li>\n",
"<li><a href=\"/real-estate\" onclick=\"ga('send', 'event', 'Global nav', 'Real Estate News');\">Real Estate News</a></li>\n",
"<li><a href=\"/Chicago-Home\" onclick=\"ga('send', 'event', 'Global nav', 'Home + Garden');\">Home Design</a></li>\n",
"</li></ul>\n",
"</li>\n",
"<!-- Style & Shopping -->\n",
"<li><a class=\"sty\" href=\"/style-shopping\" onclick=\"ga('send', 'event', 'Global nav', 'Style + Shopping');\">Style <span class=\"new-amp\">&amp;</span> Shopping</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/topic/?archive=fashion\" onclick=\"ga('send', 'event', 'Global nav', 'Fashion');\">Fashion</a></li>\n",
"<li><a href=\"/topic/?archive=sales-shopping\" onclick=\"ga('send', 'event', 'Global nav', 'Sales + Shopping News (under S+S)');\">Sales &amp; Shopping News</a></li>\n",
"<li><a href=\"/topic/?archive=tastemakers\" onclick=\"ga('send', 'event', 'Global nav', 'Tastemakers');\">Taste Makers</a></li>\n",
"</ul>\n",
"</li>\n",
"<!-- Health & Wellness -->\n",
"<li><a class=\"hg\" href=\"/Health-Wellness\" onclick=\"ga('send', 'event', 'Global nav', 'Health + Wellness');\">Health <span class=\"new-amp\">&amp;</span><br/> Wellness</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Chicago-Magazine/Promotion/Fit-Society/\" onclick=\"ga('send', 'event', 'Global nav', 'Fit Society');\">Fit Society</a></li>\n",
"<li><a href=\"/Health-Wellness\" onclick=\"ga('send', 'event', 'Global nav', 'Health + Wellness');\">Health News</a></li>\n",
"<li><a href=\"/topdocs\" onclick=\"ga('send', 'event', 'Global nav', 'Top Docs');\">Top Docs</a></li>\n",
"</ul>\n",
"</li>\n",
"<!-- Video -->\n",
"<li id=\"red-hack-item\">\n",
"<a href=\"https://www.youtube.com/user/chicagomag\" onclick=\"ga('send', 'event', 'Global nav', 'Video');\" target='_blank\"'>\n",
"  <br/>\n",
"<i id=\"red-hack\" style=\"\n",
" background-image: url(http://getbootstrap.com/2.3.2/assets/img/glyphicons-halflings.png); \n",
" display: inline-block;\n",
" filter: brightness(0) invert(1);\n",
" width: 18px;\n",
" height: 10px;\n",
" background-position: -335px -99px;\n",
" \"></i>Video</a>\n",
"</li>\n",
"<style>\n",
" i#red-hack.hover {\n",
" filter: sepia() saturate(10000%) hue-rotate(10deg) !important;\n",
" }\n",
" </style>\n",
"<script>\n",
" jQuery('#red-hack-item').hover(\n",
" function() {\n",
" jQuery(this).children(\"a\").children(\"i#red-hack\").addClass( \"hover\" );\n",
" }, function() {\n",
" jQuery(this).children(\"a\").children(\"i#red-hack\").removeClass( \"hover\" );\n",
" }\n",
" );\n",
" </script>\n",
"<!-- OLD VIDEO -->\n",
"<!-- <li><a href=\"/video\" class=\"tra\" onclick=\"ga('send', 'event', 'Global nav', 'Video');\">&nbsp;<br>Video</a>\n",
" <ul class=\"sub\">\n",
" <li><a href=\"http://www.chicagomag.com/video/Chicagos-Great-Neighborhoods/\" onclick=\"ga('send', 'event', 'Global nav', 'Chicago’s Great Neighborhoods');\">Chicago’s Great Neighborhoods</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/Inside-Chicagos-Best-Bars/\" onclick=\"ga('send', 'event', 'Global nav', 'Inside Chicago’s Best Bars');\">Inside Chicago’s Best Bars</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/Inside-Chicagos-Best-Restaurants/\" onclick=\"ga('send', 'event', 'Global nav', 'Inside Chicago’s Best Restaurants');\">Inside Chicago’s Best Restaurants</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/Inside-Chicagos-Best-Theater/\" onclick=\"ga('send', 'event', 'Global nav', 'Inside Chicago’s Best Theater');\">Inside Chicago’s Best Theater</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/In-the-Studio\" onclick=\"ga('send', 'event', 'Global nav', 'Inside the Studio');\">Inside the Studio</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/In-the-Kitchen/\" onclick=\"ga('send', 'event', 'Global nav', 'In Season');\">In the Kitchen</a></li>\n",
" </ul>\n",
" </li> -->\n",
"<!-- Visitors Guide -->\n",
"<li><a class=\"tra\" href=\"/Visitors-Guide/\" onclick=\"ga('send', 'event', 'Global nav', 'Visitors Guide');\">Visitor's <br/>Guide</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Visitors-Guide/\" onclick=\"ga('send', 'event', 'Global nav', 'Visitors Guide');\">Visitor’s Guide</a></li>\n",
"<li><a href=\"/travel\" onclick=\"ga('send', 'event', 'Global nav', 'Travel News');\">Travel News &amp; Features</a></li>\n",
"</ul>\n",
"</li>\n",
"<!-- Best of Chicago -->\n",
"<li style=\"flex-grow: 0;\">\n",
"<a class=\"boc\" href=\"/Chicago-Magazine/August-2019/Best-of-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', 'Best of Chicago');\">Best of<br> Chicago</br></a>\n",
"</li>\n",
"</ul>\n",
"</nav>\n",
"<!--==== End of Global nav menus ====-->\n",
"</header>\n",
"<!-- Begin Content Wrap -->\n",
"<a class=\"edit_from_site\" content_id=\"leaderboard-1\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (max-width:735px) {\n",
" #div-gpt-ad-leaderboard-1 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"ad ban\" id=\"div-gpt-ad-leaderboard-1\">\n",
"<script>\n",
"if (document.documentElement.clientWidth > 735) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-leaderboard-1');\n",
"});\n",
"}\n",
" </script>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"mobile-leaderboard-1\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (min-width:736px) {\n",
" #div-gpt-ad-mobile-leaderboard-1 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"mobile-ban-wrapper mobile-ban-fixed\">\n",
"<div id=\"div-gpt-ad-mobile-leaderboard-1\" style=\"height: 50px; width:320px;margin: 0 auto;\">\n",
"<script>\n",
"if (document.documentElement.clientWidth < 736) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-mobile-leaderboard-1');\n",
"})\n",
"}\n",
" </script>\n",
"</div>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"mobile-leaderboard-2\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (min-width:736px) {\n",
" #div-gpt-ad-mobile-leaderboard-2 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"mobile-ban-wrapper\" id=\"mobile-leaderboard-2\">\n",
"<div id=\"div-gpt-ad-mobile-leaderboard-2\" style=\"width: 320px; height: 50px; margin: 0 auto;\">\n",
"<script>\n",
"if (document.documentElement.clientWidth < 736) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-mobile-leaderboard-2');\n",
"})\n",
"}\n",
" </script>\n",
"</div>\n",
"</div>\n",
"<div id=\"content-wrap\">\n",
"<!--- special treatment for stacked galleries in regular articles, removes first couple leaderboard ads in between -->\n",
"<style>\n",
"div.content.post div.super-gallery-stacked-photo-outer ~ div.ad.ban {\n",
" display: none;\n",
"}\n",
".fb-like.fb-like-top {\n",
"\tdisplay: none !important;\n",
"}\n",
"</style>\n",
"<!--- Begin Page -->\n",
"<div class=\"long\" id=\"page\">\n",
"<article class=\"container long\" id=\"article-19493\">\n",
"<a class=\"edit_from_site\" content_id=\"550\" href=\"#\" media_id=\"97\">Edit Module</a>\n",
"<div id=\"article-header-image-container\">\n",
"<header class=\"clearfix\">\n",
"<!--- special toppers for repeat features -->\n",
"<!--- special treatment for Urbanist -->\n",
"<h1 class=\"headline\">The 50 Best Sandwiches in Chicago</h1>\n",
"<h2 class=\"deck\">Our list of Chicago’s 50 best sandwiches, ranked in order of deliciousness</h2>\n",
"<div class=\"article-meta clearfix\" id=\"article-meta\">\n",
"<p class=\"timestamp\">Published Oct. 9, 2012</p>\n",
"<section class=\"clearfix\" id=\"share-mini\">\n",
"<ul class=\"story-share-buttons story-share-buttons-mini list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/?utm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20above%20story%2019493%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event', 'Sharing', 'Facebook share from top of article','The 50 Best Sandwiches in Chicago');\n",
" return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20above%20story%2019493%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=The+50+Best+Sandwiches+in+Chicago&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" onclick=\"ga('send', 'event', 'Sharing', 'Tweet story from top of article','The 50 Best Sandwiches in Chicago');\n",
" return tweetPopup('The+50+Best+Sandwiches+in+Chicago','/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/','19493');\n",
" \" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"<li class=\"eml\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageID=19493&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-Chicago%2Findex.php&amp;mode=email','emailThisPage','status=no,scrollbars=yes,resizable=yes,width=420,height=540'); ga('send', 'event', 'Sharing', 'Email story (top of story)','The 50 Best Sandwiches in Chicago'); return false;\" url=\"email this page\"><i class=\"icon-envelope\"></i></a></li>\n",
"<li class=\"prnt\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageid=19493&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-Chicago%2Findex.php&amp;mode=print','printThisPage','status=no,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,width=570'); ga('send', 'event', 'Sharing', 'Print story (top of story)' ,'The 50 Best Sandwiches in Chicago'); return false;\" target=\"_blank\" url=\"print this page\"><i class=\"icon-print\"></i></a></li>\n",
"<li class=\"cmmnt\"><a href=\"javascript:void(0);\" onclick=\"jumpto('#comment',150);\"><i class=\"icon-comment\"></i></a></li>\n",
"<li class=\"comment-count\"><a data-disqus-identifier=\"19493\" href=\"javascript:void(0);\" id=\"comment-count\" onclick=\"jumpto('#comment',150);\"></a></li>\n",
"</ul>\n",
"</section> </div> </header>\n",
"<section class=\"caption main\">\n",
"<figure>\n",
"<div class=\"position-relative image-launch-wrapper\">\n",
"<picture>\n",
"<source media=\"(max-width: 320px)\" srcset=\"/images/cache/cache_6/cache_8/cache_f/sandwich-old-oak-032fff86.jpeg?ver=1483657051&amp;aspectratio=1.4634146341463, /images/cache/cache_e/cache_3/cache_0/sandwich-old-oak-5138903e.jpeg?ver=1483657051&amp;aspectratio=1.4634146341463 2x\"/>\n",
"<source media=\"(max-width: 470px)\" srcset=\"/images/cache/cache_b/cache_2/cache_1/sandwich-old-oak-3cfe412b.jpeg?ver=1483657051&amp;aspectratio=1.4754098360656, /images/cache/cache_6/cache_6/cache_a/sandwich-old-oak-198f4a66.jpeg?ver=1483657051&amp;aspectratio=1.4754098360656 2x\"/>\n",
"<source srcset=\"/images/cache/cache_5/cache_a/cache_7/sandwich-old-oak-752cb7a5.jpeg?ver=1482330047&amp;aspectratio=1.4761904761905, /images/cache/cache_1/cache_3/cache_1/sandwich-old-oak-2fa7d131.jpeg?ver=1483649262&amp;aspectratio=1.4761904761905 2x\"/>\n",
"<img alt=\"BLT at Old Oak Tap, the No. 1 sandwich in Chicago.\" height=\"420\" id=\"article-lead-image\" src=\"/images/cache/cache_5/cache_a/cache_7/sandwich-old-oak-752cb7a5.jpeg?ver=1482330047&amp;aspectratio=1.4761904761905\" width=\"620\">\n",
"</img></picture>\n",
"<a class=\"launch bottom-right\" href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/index.php?mode=popup&amp;cp=1&amp;view=slideshow&amp;play=0\" id=\"gallery-link\" style=\"display: none;\">Launch gallery</a>\n",
"</div>\n",
"<figcaption> <span class=\"caption\">BLT at Old Oak Tap, the No. 1 sandwich in Chicago.</span>   <span class=\"photo-credit\">Photograph: Anna Knott; Food Stylist: Lisa Kuehl</span>\n",
"</figcaption>\n",
"</figure>\n",
"</section>\n",
"</div><!-- /#article-header-image-container -->\n",
"<div class=\"content-and-sidebar\">\n",
"<div class=\"content post\">\n",
"<div class=\"fb-like fb-like-top\" data-href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" data-layout=\"box_count\" data-send=\"false\" data-share=\"true\" data-show-faces=\"false\" data-width=\"50\"></div>\n",
"<p><span class=\"dropcap\">F</span>or generations, sandwiches were the ultimate guilty pleasure of subcultures that had no patience for guilt: hungry bachelors, school kids, working stiffs, old men in delis. To fridge-foraging rubes like Dagwood, quality wasn’t half as important as quantity. The sandwich was one of the only snacks you were allowed to pile as high as you wanted with anything you desired and cram into your face with both hands—a meal so inelegant and blithely proud of its inelegance that it came in six-foot segments for parties. And we ate it. Standing up.</p>\n",
"<section class=\"related-content pull-right\">\n",
"<h3>Related Content</h3>\n",
"<ul>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-\n",
"Chicago-The-Best-Sliders-in-Town\">The Best Sliders in Town</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-\n",
"Chicago-Where-to-Get-Your-Fix-Around-the-Clock\">Where to Get Your Fix Around the Clock</a></li>\n",
"</ul>\n",
"</section>\n",
"<p>Now we’ve got French dips made with shaved prime rib, po’ boys with organic shrimp, and grilled cheese with fancy pimiento cheese. Hell, you can get a buttered ciabatta layered with local eggs, house-cured speck, and fontina for breakfast at Balsan if the idea of spending $19 for a ham and egg sandwich does not scandalize you. What in the name of John Montagu is going on here?</p>\n",
"<p>The sandwich pendulum has always swung erratically from the treat of the nobility to the fuel of the proletariat. But what we’re witnessing now is the sharpest swerve yet toward the land of fine dining—a shift that overlaps, not coincidentally, with the great democratization of Chicago’s restaurants. Ground zero for the boom is Publican Quality Meats, where Paul Kahan regards sandwiches as serious dishes. So does Acadia’s Ryan McCaskey, who makes a mean lobster roll, and Rick Bayless, who offers up a vegetarian stunner at Xoco.</p>\n",
"<p>To guide you through the bustling sandscape, we fanned out across the city and suburbs, hitting spots high and low in search of anything delicious between two slices of bread. For the purposes of this story, we defined “sandwich” in the strictest of terms: no wraps, dumplings, or open-faced pretenders. Hamburgers and hot dogs didn’t qualify. Italian beef sandwiches did, but not one made this list. (Face facts: Chicago’s spongy grease bomb is not among the better contributions to the genre.) We gave points to the well crafted, the fresh, and the robust, anchored by bread with enough distinct character to bolster the proceedings without overshadowing or interfering.</p>\n",
"<p>The result: our list of Chicago’s 50 best sandwiches, ranked in order of deliciousness. Some are ingenious, such as Scofflaw’s layered masterpiece of braised brisket, pork belly, and pork loin. Others are blunt and glorious classics, done simply and done right. (Meatball sub from Bari, take a bow.)</p>\n",
"<p>In our research, we learned that the sandwich is a wily chameleon, soaking up and synthesizing every trend, be it the resurgence of house-cured charcuterie or the sudden ubiquity of arugula. We learned to ask for extra napkins ahead of time. And we learned, above all, that quality and quantity can intersect in restaurants, and there’s no shame in that. Only joy.</p>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">1</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\"><b>BLT</b><br>\n",
"Old Oak Tap<br>\n",
"<em>Read more</em> </br></br></a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">2</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Au-Cheval-Fried-Bologna/\"><b>Fried Bologna</b><br/>\n",
"Au Cheval<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">3</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Xoco-Woodland-Mushroom/\"><b>Woodland Mushroom</b><br/>\n",
"Xoco<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">4</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Als-Deli-Roast-Beef/\"><b>Roast Beef</b><br/>\n",
"Al’s Deli<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">5</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Publican-Quality-Meats-PB-L/\"><b>PB&amp;L</b><br/>\n",
"Publican Quality Meats<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">6</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Hendrickx-Belgian-Bread-Crafter-Belgian-Chicken-Curry-Salad/\"><b>Belgian Chicken Curry Salad</b><br/>\n",
"Hendrickx Belgian Bread Crafter<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">7</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Acadia-Lobster-Roll/\"><b>Lobster Roll</b><br/>\n",
"Acadia<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">8</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Birchwood-Kitchen-Smoked-Salmon-Salad/\"><b>Smoked Salmon Salad</b><br/>\n",
"Birchwood Kitchen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">9</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Cemitas-Puebla-Atomica-Cemitas/\"><b>Atomica Cemitas</b><br/>\n",
"Cemitas Puebla<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">10</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Nana-Grilled-Laughing-Bird-Shrimp-and-Fried-Oyster-Po-Boy/\"><b>Grilled Laughing Bird Shrimp and Fried Po’ Boy</b><br/>\n",
"Nana<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">11</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Lula-Cafe-Ham-and-Raclette-Panino/\"><b>Ham and Raclette Panino</b><br/>\n",
"Lula Cafe<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">12</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Ricobenes-Breaded-Steak/\"><b>Breaded Steak</b><br/>\n",
"Ricobene’s<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">13</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Frog-n-Snail-The-Hawkeye/\"><b>The Hawkeye</b><br/>\n",
"Frog n Snail<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">14</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Crosbys-Kitchen-Chicken-Dip/\"><b>Chicken Dip</b><br/>\n",
"Crosby’s Kitchen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">15</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Longman-and-Eagle-Wild-Boar-Sloppy-Joe/\"><b>Wild Boar Sloppy Joe</b><br/>\n",
"Longman &amp; Eagle<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">16</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Bari-Meatball-Sub/\"><b>Meatball Sub</b><br/>\n",
"Bari<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">17</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Mannys-Corned-Beef/\"><b>Corned Beef</b><br/>\n",
"Manny’s<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">18</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Eggys-Turkey-Club/\"><b>Turkey Club</b><br/>\n",
"Eggy’s<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">19</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Jerusalem-Falafel/\"><b>Falafel</b><br/>\n",
"Old Jerusalem<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">20</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Mindys-HotChocolate-Crab-Cake/\"><b>Crab Cake</b><br/>\n",
"Mindy’s HotChocolate<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">21</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Olgas-Delicatessen-Chicken-Schnitzel/\"><b>Chicken Schnitzel</b><br/>\n",
"Olga’s Delicatessen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">22</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Dawali-Mediterranean-Kitchen-Shawarma/\"><b>Shawarma</b><br/>\n",
"Dawali Mediterranean Kitchen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">23</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Big-Jones-Toasted-Pimiento-Cheese/\"><b>Toasted Pimiento Cheese</b><br/>\n",
"Big Jones<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">24</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-La-Pane-Vegetarian-Panino/\"><b>Vegetarian Panino</b><br/>\n",
"La Pane<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">25</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Pastoral-Cali-Chevre/\"><b>Cali Chèvre</b><br/>\n",
"Pastoral<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">26</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Maxs-Deli-Pastrami/\"><b>Pastrami</b><br/>\n",
"Max’s Deli<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">27</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Luckys-Sandwich-Co-The-Fredo/\"><b>The Fredo</b><br/>\n",
"Lucky’s Sandwich Co.<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">28</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-City-Provisions-Smoked-Ham/\"><b>Smoked Ham</b><br/>\n",
"City Provisions<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">29</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Papas-Cache-Sabroso-Jibarito/\"><b>Jibarito</b><br/>\n",
"Papa’s Cache Sabroso<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">30</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Bavettes-Bar-and-Boeuf-Shaved-Prime-Rib/\"><b>Shaved Prime Rib</b><br/>\n",
"Bavette’s Bar &amp; Boeuf<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">31</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Hannahs-Bretzel-Serrano-Ham-and-Manchego-Cheese/\"><b>Serrano Ham and Manchego Cheese</b><br/>\n",
"Hannah’s Bretzel<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">32</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-La-Fournette-Tuna-Salad/\"><b>Tuna Salad</b><br/>\n",
"La Fournette<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">33</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Paramount-Room-Paramount-Reuben/\"><b>Paramount Reuben</b><br/>\n",
"Paramount Room<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">34</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Melt-Sandwich-Shoppe-The-Istanbul/\"><b>The Istanbul</b><br/>\n",
"Melt Sandwich Shoppe<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">35</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Floriole-Cafe-and-Bakery-BAD/\"><b>B.A.D.</b><br/>\n",
"Floriole Cafe &amp; Bakery<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">36</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-First-Slice-Pie-Cafe-Duck-Confit-and-Mozzarella/\"><b>Duck Confit and Mozzarella</b><br/>\n",
"First Slice Pie Café<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">37</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Troquet-Croque-Monsieur/\"><b>Croque Monsieur</b><br/>\n",
"Troquet<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">38</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Grahamwich-Green-Garbanzo/\"><b>Green Garbanzo</b><br/>\n",
"Grahamwich<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">39</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Saigon-Sisters-The-Hen-House/\"><b>The Hen House</b><br/>\n",
"Saigon Sisters<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">40</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Rosalias-Deli-Tuscan-Chicken/\"><b>Tuscan Chicken</b><br/>\n",
"Rosalia’s Deli<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">41</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Z-and-H-MarketCafe-The-Marty/\"><b>The Marty </b><br/>\n",
"Z&amp;H MarketCafe<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">42</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Market-House-on-the-Square-Whitefish/\"><b>Whitefish</b><br/>\n",
"Market House on the Square<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">43</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Elaines-Coffee-Call-Oat-Bread-Pecan-Butter-and-Fruit-Jam/\"><b>Oat Bread, Pecan Butter, and Fruit Jam</b><br/>\n",
"Elaine’s Coffee Call<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">44</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Marion-Street-Cheese-Market-Cauliflower-Melt/\"><b>Cauliflower Melt</b><br/>\n",
"Marion Street Cheese Market<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">45</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Cafecito-Cubano/\"><b>Cubana</b><br/>\n",
"Cafecito<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">46</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Chickpea-Kufta/\"><b>Kufta</b><br/>\n",
"Chickpea<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">47</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-The-Goddess-and-Grocer-Debbies-Egg-Salad/\"><b>Debbie’s Egg Salad</b><br/>\n",
"The Goddess and Grocer<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">48</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Zenwich-Beef-Curry/\"><b>Beef Curry</b><br/>\n",
"Zenwich<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">49</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Toni-Patisserie-Le-Vegetarien/\"><b>Le Végétarien</b><br/>\n",
"Toni Patisserie<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<div class=\"sammy\" style=\"position: relative; border-bottom: 0\">\n",
"<div class=\"sammyRank\">50</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Phoebes-Bakery-The-Gatsby/\"><b>The Gatsby</b><br/>\n",
"Phoebe’s Bakery<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>\n",
"<!-- /#sandwichFront -->\n",
"<footer>Edited by Carly Boers, Penny Pollack, and Jeff Ruby; Contributors: Cassie Walker Burke, Elly Fishman, Peter Gianopulos, Noah Isackson, Maryanne Johnson, Esther Kang, Megan Lovejoy, Graham Meyer, Matt Schur, Lena Singer, Emmet Sullivan, Jennifer Tanaka, Joanne Trestrail</footer>\n",
"<script type=\"text/javascript\">\n",
"var feedicon=document.getElementById('__atomfeed__'); if(feedicon) feedicon.style.display='inline';</script>\n",
"<footer>This article appears in the <a href=\"/Chicago-Magazine/November-2012/\">November 2012</a> issue of <em> Chicago</em> magazine. <a href=\"http://www.chicagomag.com/subscribe\" onclick=\"ga('send', 'event','Refer clicks', 'Subscribe, article footer');\">Subscribe to <em>Chicago</em> magazine</a>.</footer>\n",
"<div class=\"clearfix\"></div>\n",
"<script>\n",
" var newsletterChoice = \"Dish\";\n",
"</script>\n",
"<div class=\"margin-top-10 margin-bottom-40\" id=\"footer-newsletter-subscribe\">\n",
"<div class=\"lazyload\" data-url=\"/lazyloads/furniture/dish-subscribe-footer.html?2\" id=\"lazy-newsletter-footer\"> </div>\n",
"</div>\n",
"<script>\n",
" jQuery(function(){\n",
" // If the user has already subscribed to this newsletter, hide the footer form.\n",
" // In its stead, reveal the related articles and popular stories. (Super articles only.)\n",
" if (getCookie('subscribe-Dish') == 'true') {\n",
" jQuery('#footer-newsletter-subscribe').hide();\n",
" // jQuery('.show-if-no-newsletter-cta').show();\n",
" }\n",
" // else {\n",
" // jQuery('.show-if-no-newsletter-cta').hide();\n",
" // }\n",
" })\n",
"\n",
"\n",
"\n",
"</script>\n",
"<section class=\"clearfix\" id=\"share\">\n",
"<h3>Share</h3>\n",
"<ul class=\"story-share-buttons list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com//Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20below%20story%2019493%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event', 'Sharing', 'Facebook share from article','The 50 Best Sandwiches in Chicago');\n",
" return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com//Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20below%20story%2019493%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=The+50+Best+Sandwiches+in+Chicago&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\" onclick=\"ga('send', 'event', 'Sharing', 'Tweet story from article','The 50 Best Sandwiches in Chicago');\n",
" return tweetPopup('The+50+Best+Sandwiches+in+Chicago','/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/','19493');\n",
" \" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"<li class=\"eml\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageID=19493&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-Chicago%2Findex.php&amp;mode=email','emailThisPage','status=no,scrollbars=yes,resizable=yes,width=420,height=540'); ga('send', 'event', 'Sharing', 'Email story','The 50 Best Sandwiches in Chicago'); return false;\" url=\"email this page\"><i class=\"icon-envelope\"></i></a></li>\n",
"<li class=\"prnt\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageid=19493&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-Chicago%2Findex.php&amp;mode=print','printThisPage','status=no,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,width=570'); ga('send', 'event', 'Sharing', 'Print story' ,'The 50 Best Sandwiches in Chicago'); return false;\" target=\"_blank\" url=\"print this page\"><i class=\"icon-print\"></i></a></li>\n",
"<li class=\"cmmnt\"><a href=\"javascript:void(0);\" onclick=\"jumpto('#comment',150);\"><i class=\"icon-comment\"></i></a></li>\n",
"</ul>\n",
"</section>\n",
"<a class=\"edit_from_site\" content_id=\"ad-600-100\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (max-width:599px) {\n",
" #ad-600-100-outer {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"ad ban-600\" id=\"ad-600-100-outer\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-600-100\"></div>\n",
"<script>\n",
"\n",
"if (document.documentElement.clientWidth > 600) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-600-100');\n",
"});\n",
"}\n",
" </script>\n",
"</div>\n",
"<section id=\"related-articles\">\n",
"<a class=\"title\" href=\"/dining-drinking\">Other Dining &amp; Drinking stories</a>\n",
"<div class=\"related-row clearfix\">\n",
"<div class=\"related related-1\">\n",
"<a class=\"related-thumb\" href=\"/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 1, '/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/');\" style=\"background-image: url('/images/cache/cache_8/cache_0/cache_0/C20200607-F-I-Got-a-Guy-Greg-Wade-ff206008.jpeg?ver=1590074990&amp;aspectratio=1.5'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 1, '/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/');\">Searching High and Low for Flour? Try the Publican’s Miller</a></h2>\n",
"<p class=\"time\">6 days ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"<div class=\"related related-2 related-nativo\">\n",
"<a class=\"related-thumb\" href=\"/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 2, '/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/');\" style=\"background-image: url('/images/cache/cache_f/cache_1/cache_3/EggintheHoleHamSandwich-5459731f.jpeg?ver=1589810459&amp;aspectratio=1.4791666666667'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 2, '/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/');\">Blackbird’s Chef Wants You to “Sandwich in Place”</a></h2>\n",
"<p class=\"time\">1 week ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"</div><!-- /.related-row -->\n",
"<div class=\"related-row clearfix\">\n",
"<div class=\"related related-3\">\n",
"<a class=\"related-thumb\" href=\"/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 3, '/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/');\" style=\"background-image: url('/images/cache/cache_e/cache_d/cache_7/N3MRCSZ35RFYFAI53T3VGY7G64-d6b357de.jpeg?ver=1589393500&amp;aspectratio=1.5'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 3, '/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/');\">Kevin Boehm: PPP Repayment Terms a “Death Sentence”</a></h2>\n",
"<p class=\"time\">2 weeks ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"<div class=\"related related-4\">\n",
"<a class=\"related-thumb\" href=\"/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 4, '/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/');\" style=\"background-image: url('/images/cache/cache_c/cache_9/cache_b/thumbnail_042819-056-60088b9c.jpeg?ver=1589219589&amp;aspectratio=1.5'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 4, '/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/');\">Chicago’s By-Hospitality, For-Hospitality Relief Fund</a></h2>\n",
"<p class=\"time\">2 weeks ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"</div><!-- /.related-row -->\n",
"</section>\n",
"<!-- End Related Articles -->\n",
"<div id=\"comment\" style=\"clear: both; height: 1px;\"></div>\n",
"<a class=\"edit_from_site\" content_id=\"comments-disqus\" href=\"#\" media_id=\"83\">Edit Module</a><div class=\"comments-block\" id=\"commentFormContainer\">\n",
"<h5 class=\"add-comment\">Submit your comment</h5>\n",
"<p class=\"comments-disclaimer\">Comments are moderated. We review them in an effort to remove foul language, commercial messages, abuse, and irrelevancies.</p>\n",
"<div id=\"disqus_thread\" style=\"max-width: 600px;\"></div>\n",
"<script type=\"text/javascript\">\n",
"</script>\n",
"<noscript>Enable JavaScript to view the <a href=\"http://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n",
"</div>\n",
"</div>\n",
"<!-- Begin Sidebar -->\n",
"<aside class=\"article long clearfix\">\n",
"<div class=\"tablet-sidebar-left\">\n",
"<a class=\"edit_from_site\" content_id=\"widget-marketplace-sponsor\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style>\n",
"\n",
".btn-widget-small {\n",
" margin-bottom: 5px;}\n",
"\n",
".amp {\n",
"color: white;\n",
"webkit-transition: none .2s ease; \n",
"}\n",
"\n",
"ul.menu {\n",
"background: black;\n",
" position:absolute;\n",
" /*height: 0px;*/\n",
" visibility: hidden;\n",
" margin-top: 0px;\n",
" background-color: black;\n",
" width: 300px;\n",
" padding: 0px 0px 10px;\n",
"z-index: 9999999;\n",
"}\n",
"\n",
"ul.menu li a {\n",
" font-size: .75em;\n",
" font-style: italic;\n",
" text-align:center;\n",
"}\n",
"#btn-sponsored-features {\n",
"position: relative;\n",
"}\n",
"\n",
"#btn-sponsored-features:hover .menu {\n",
" /*position: relative;*/\n",
" visibility: visible;\n",
"\n",
" /*height: 80%;*/\n",
"\n",
"}\n",
"\n",
"ul.menu a {\n",
"-webkit-transition: none;-moz-transition:none;transition:none;\n",
"}\n",
"#marketing-widget {\n",
"margin-bottom: 20px;\n",
"}\n",
"</style>\n",
"<div id=\"marketing-widget\">\n",
"<div class=\"btn-widget-small btn-widget-small-reverse\">\n",
"<a href=\"/marketplace\" onclick=\"ga('send', 'event','M&amp;C widget', 'Marketplace');\" style=\"display: inline-block; margin-right: 2px;\">Marketplace</a>\n",
"</div>\n",
"<div class=\"btn-widget-small btn-widget-small-reverse\">\n",
"<a href=\"/Chicago-Magazine/Promotion/Events-and-Party-Pix/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Events and Party Pix');\" style=\"display: inline-block; margin-right: 2px;\">Events <span class=\"new-amp\">&amp;</span> Party Pix</a>\n",
"</div>\n",
"<div class=\"btn-widget-small btn-widget-small-reverse\" id=\"btn-sponsored-features\"><span>Resource Guide</span>\n",
"<ul class=\"menu\">\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Amelia-Island/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Amelia Island');\">Amelia Island</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Chicago-Profiles/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Chicago Profiles');\">Chicago Profiles</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Dental-Profiles/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Dental Profiles');\">Dental Profiles</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Experience-Chicago/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Experience Chicago');\">Experience Chicago</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Family-Law/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Family Law Profiles');\">Family Law Profiles</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Guide-to-Summer-Camps/\" onclick=\"ga('send', 'event','M&amp;C widget', '2019 Summer Camps');\">Guide to Summer Camps</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Give-Chicago\" onclick=\"ga('send', 'event','M&amp;C widget', '2018 Give Chicago');\">Give Chicago</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/2019-Go-West/\" onclick=\"ga('send', 'event','M&amp;C widget', '2018 Go West');\">Go West</a></li>\n",
"<!-- <li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Make-it-Lincoln-Park-2018/\" onclick=\"ga('send', 'event','M&C widget', 'Make It Lincoln Park');\">Make it Lincoln Park</a></li> -->\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Prime-of-Your-Life-2018/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Prime of Your Life');\">Prime of Your Life</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Professional-Profiles/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Professional Profiles');\">Professional Profiles</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Promotion/School-Open-House-Guide/\" onclick=\"ga('send', 'event','M&amp;C widget', 'School Open House Guide');\">School Open House Guide</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Promotion/Top-Producing-Agents/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Top Producing Agents');\">Top Producing Agents</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Promotion/Women-to-Watch/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Women to Watch');\">Women to Watch</a></li>\n",
"</ul>\n",
"</div>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"cube-1\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<div class=\"ad sq\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-cube-1\" style=\"height: 250px; width: 300px;\"></div>\n",
"<script type=\"text/javascript\">\n",
"googletag.cmd.push(function() {\n",
"\t\tgoogletag.display('div-gpt-ad-cube-1');\n",
"});\n",
"\t</script>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"cube-3\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<div class=\"ad sq\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-cube-3\" style=\"width: 300px; height: 250px; margin: 0 auto;\">\n",
"<script>\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-cube-3');\n",
"});\n",
" </script>\n",
"</div>\n",
"</div>\n",
"</div>\n",
"<div class=\"tablet-sidebar-right\">\n",
"<form action=\"\" method=\"post\" name=\"newsletter\" onsubmit=\"validateNewsletter(); return false;\">\n",
"<section class=\"newsletters widget\" id=\"category-specific-newsletter\">\n",
"<h2 class=\"title red-border\" id=\"newsletterTitle\">Get Our Newsletters</h2>\n",
"<div class=\"newsletter-reveal clearfix\" style=\"display: block;\">\n",
"<p class=\"newsletter-description\"></p>\n",
"<input class=\"clean white\" name=\"email\" placeholder=\"Your email address\" type=\"text\"/>\n",
"<div class=\"form-error\" id=\"error-email\">\n",
" Please enter your email address\n",
" </div>\n",
"<label class=\"checkbox\" for=\"over21\"> <input checked=\"\" id=\"over21\" name=\"over21\" type=\"checkbox\" value=\"yes\"/>Are you 21 or older?</label>\n",
"<input name=\"source\" type=\"hidden\" value=\"/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/\"/>\n",
"<input id=\"newsletterChoice\" name=\"newsletter\" type=\"hidden\" value=\"\"/>\n",
"<br style=\"clear:both;\"/>\n",
"<button type=\"submit\">Subscribe</button>\n",
"</div>\n",
"</section>\n",
"</form>\n",
"<script>\n",
" var newsletterChoice = \"Dish\";\n",
" \n",
" \n",
"\n",
" var cookieValue = getCookie('subscribe-'+newsletterChoice.replace(' ','-'));\n",
" if (cookieValue == 'true') {\n",
" jQuery('#category-specific-newsletter').hide();\n",
" }\n",
"\n",
" else {\n",
" var description = '';\n",
" switch (newsletterChoice) {\n",
" case 'Home & Real Estate':\n",
" description = \"<span class='leadin'>Fridays:</span> Get the latest real estate news, keep an eye on the city’s most beautiful and unique listings, and learn about the best home & design events locally.\";\n",
" break;\n",
" case 'The 312':\n",
" description = \"<span class='leadin'>Tuesdays:</span> Get up to speed on the week’s most important stories and must-reads.\";\n",
" break;\n",
" case 'Chicago Guide':\n",
" description = \"<span class='leadin'>Wednesdays:</span> <em>Chicago</em>’s culture critics bring you a weekly list of the top five events worth your time and money.\";\n",
" break;\n",
" case 'Go Travel':\n",
" description = \"<span class='leadin'>Monthly:</span> Be the first to know about exclusive travel discounts and offers to help you plan your next big adventure, courtesy of our sponsors.\";\n",
" break;\n",
" case 'Dish':\n",
" description = \"<span class='leadin'>Wednesdays:</span> Want the latest news from the Chicagoland dining scene served up fresh in your email inbox? Sign up for the weekly newsletter and get inside access to the city’s most plugged-in food and dining coverage. \";\n",
" break;\n",
" case 'Sales Check':\n",
" description = \"<span class='leadin'>Thursdays:</span> Hear about the great shopping experiences in the Chicago area, plus the latest news about hot store openings, sales, trends, and local retail news. Shop-a-holic? We know just how you feel. \";\n",
" break;\n",
" case 'VIP Newsletter':\n",
" description = \"<span class='leadin'>Mondays, Wednesdays, and Fridays: </span><em>Chicago</em> magazine hosts various events throughout the year. Sign up and join the party!\";\n",
" break;\n",
" case 'Special Offers':\n",
" description = 'Receive special offers and discounts from <em>Chicago</em> magazine’s selected partners.';\n",
" break;\n",
" case 'Health & Wellness':\n",
" description = \"<span class='leadin'>Third Mondays: </span>The top local stories in health care innovation, nutrition, exercise, wellness, and more—plus, local classes and workshops worth attending. Our editors will bring you the latest on how to live life, well.\";\n",
" break;\n",
" case 'Select all':\n",
" description = 'Subscribe to <em>Chicago Guide</em>, <em>Chicago Travel</em>, <em>Dish</em>, <em>Health & Wellness</em>, <em>Sales Check</em>, <em>Home & Real Estate</em>, <em>VIP Newsletter</em>, and <em>Special Offers</em>.'\n",
" }\n",
"\n",
"\n",
" jQuery('.newsletter-description').html(description);\n",
" jQuery('.newsletter-reveal').slideDown();\n",
" jQuery('#newsletterChoice').val(newsletterChoice);\n",
" jQuery('#newsletterTitle').html('Subscribe to ' + newsletterChoice);\n",
" }\n",
"\n",
"</script>\n",
"<div class=\"lazyload\" data-url=\"/lazyloads/most-popular/\" id=\"lazy-popular\"></div>\n",
"<div id=\"fixie-side-position-finder\">\n",
"<div class=\"clearfix\" id=\"fixie-side\">\n",
"<a class=\"edit_from_site\" content_id=\"cube-2\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<div class=\"ad sq\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-cube-2\" style=\"width: 300px; height: 250px; margin: 0 auto;\">\n",
"<script>\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-cube-2');\n",
"});\n",
" </script>\n",
"</div>\n",
"</div>\n",
"<script>\n",
" // Make the fixed slot refresh every 2 minutes (on desktops; ad is not fixed elsewhere)\n",
" setInterval(function(){\n",
" if (jQuery('#fixie-side').css('position') == 'fixed') {\n",
" googletag.pubads().refresh([cube2]);\n",
" }\n",
" }, 120000);\n",
" </script>\n",
"<a class=\"edit_from_site\" content_id=\"widget-current-issue\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<section class=\"subscribe widget\">\n",
"<a class=\"button\" href=\"javascript:void(0);\"><span class=\"title\">Subscribe</span><span class=\"plus\">+</span><span class=\"minus\">-</span></a>\n",
"<div class=\"issue\">\n",
"<a href=\"/Chicago-Magazine/May-2020/\" onclick=\"ga('send', 'event', 'Current issue widget', 'Current issue');\"><img alt=\"Current issue of Chicago magazine\" height=\"145\" src=\"/images/cache/cache_4/cache_1/cache_e/CMAG0520-4c4a6e14.jpeg?ver=1588621703&amp;aspectratio=0.75862068965517\" width=\"110\"/></a>\n",
"<a class=\"btn\" href=\"/subscribe\" onclick=\"ga('send', 'event', 'Current issue widget', 'Subscribe (red button)');\">Subscribe</a>\n",
"</div>\n",
"<ul>\n",
"<li>\n",
"<a href=\"/subscribe\" onclick=\"ga('send', 'event', 'Current issue widget', 'Subscribe');\">\n",
"<span class=\"lead\"><span class=\"red\">Subscribe</span> to the</span>\n",
"<span class=\"title\">Print &amp; Tablet Edition</span>\n",
"</a>\n",
"</li>\n",
"<li>\n",
"<a href=\"http://www.chicagomag.com/digitaledition\" onclick=\"ga('send', 'event', 'Current issue widget', 'Digital edition');\">\n",
"<span class=\"lead\"><span class=\"red\">Subscribe</span> to the</span>\n",
"<span class=\"title\">Digital Edition</span>\n",
"</a>\n",
"</li>\n",
"<li>\n",
"<a class=\"ipad\" href=\"/ipad\" onclick=\"ga('send', 'event', 'Current issue widget', 'iPad');\">\n",
"<span class=\"lead\"><span class=\"red\">Download</span> our tablet app for</span>\n",
"<span class=\"title\">iPad</span>\n",
"</a>\n",
"<a class=\"android\" href=\"/android\" onclick=\"ga('send', 'event', 'Current issue widget', 'Android');\">\n",
"<span class=\"title\">Android</span>\n",
"</a>\n",
"</li>\n",
"<li>\n",
"<a class=\"single\" href=\"/single-issues\" onclick=\"ga('send', 'event', 'Current issue widget', 'Single Issues');\">\n",
"<span class=\"lead\"><span class=\"red\">Purchase</span> copies of</span>\n",
"<span class=\"title\">Single Issues</span>\n",
"</a>\n",
"<a class=\"gift\" href=\"/gifts\" onclick=\"ga('send', 'event', 'Current issue widget', 'Gift');\">Give a <span class=\"red\">gift</span> subscription</a>\n",
"</li>\n",
"</ul>\n",
"</section>\n",
"</div>\n",
"</div>\n",
"</div>\n",
"</aside>\n",
"<!-- End Sidebar -->\n",
"</div> <!-- End .content-and-sidebar -->\n",
"</article>\n",
"<!-- End Main Article Container -->\n",
"</div><!--- End Page -->\n",
"<a class=\"edit_from_site\" content_id=\"leaderboard-2\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (max-width:735px) {\n",
" #div-gpt-ad-leaderboard-2 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"ad ban\" id=\"div-gpt-ad-leaderboard-2\">\n",
"<script type=\"text/javascript\">\n",
"if (document.documentElement.clientWidth > 735) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-leaderboard-2');\n",
"});\n",
"}\n",
" </script>\n",
"</div>\n",
"</div><!-- End Content Wrap -->\n",
"<div id=\"div-out-of-page\">\n",
"<script>\n",
" googletag.cmd.push(function() {\n",
" googletag.display('div-out-of-page');\n",
" });\n",
" </script>\n",
"</div>\n",
"<script>(function(d, s, id) {\n",
" var js, fjs = d.getElementsByTagName(s)[0];\n",
" if (d.getElementById(id)) return;\n",
" js = d.createElement(s); js.id = id;\n",
" js.src = \"//connect.facebook.net/en_US/all.js#xfbml=1&appId=432224116825361\";\n",
" fjs.parentNode.insertBefore(js, fjs);\n",
"}(document, 'script', 'facebook-jssdk'));</script>\n",
"<!-- LSC tracking pixel -->\n",
"<script>\n",
" document.write('<script id=\"tbw_pixel\" type=\"text/javascript\" src=\"//d26x5ounzdjojj.cloudfront.net/tbw/tbw_analytics_v1.0.js?' + (new Date()).getHours() + '\" onload=\"tbw_parse(this);\" tbw_site_id=\"Ldd6b4994ab6844a0\" tbw_segment=\"Retargeting\" defer><\\/script>');\n",
"</script>\n",
"<!-- fix for gallery height bug -->\n",
"<script>\n",
"jQuery( document ).ready(function() {\n",
" jQuery('.photoset-grid-basic .photoset-row').css( \"height\", \"initial\" );\n",
"});\n",
"</script>\n",
"<!-- force removal of bottom nav in gallery view -->\n",
"<style>\n",
"body.gallery.no-nav aside.story-nav-aside {\n",
" display: none !important;\n",
"}\n",
"</style>\n",
"<footer class=\"page-footer\">\n",
"<nav>\n",
"<a class=\"logo background-logo-svg\" href=\"/\" onclick=\"ga('send', 'event', 'Global footer', 'Logo to home');\">Chicago magazine</a>\n",
"<select class=\"clean wide nav\" id=\"page-nav-mobile\" onchange=\"location = this.options[this.selectedIndex].value;\">\n",
"<option value=\"/Chicago-Magazine/Advertise\">Advertise</option>\n",
"<option value=\"/Chicago-Magazine/Contact-Us\">Contact Us</option>\n",
"<option value=\"/Chicago-Magazine/Classifieds/\">Marketplace</option>\n",
"<option value=\"http://www.tronc.com/privacy-policy/\">Privacy &amp; Terms (Updated)</option>\n",
"<option value=\"/Chicago-Magazine/archive-index-test\">Archive</option>\n",
"<option value=\"/customerservice\">Customer Service</option>\n",
"<option value=\"/newsletters\">Newsletters</option>\n",
"<option value=\"/subscribe\">Subscribe</option>\n",
"</select>\n",
"<section class=\"links\">\n",
"<ul>\n",
"<li><a href=\"/Chicago-Magazine/Advertise\" onclick=\"ga('send', 'event','Global footer', 'Advertise');\">Advertise</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Contact-Us\" onclick=\"ga('send', 'event','Global footer', 'Contact us');\">Contact Us</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Classifieds/\" onclick=\"ga('send', 'event','Global footer', 'Marketplace');\">Marketplace</a></li>\n",
"<li><a href=\"http://www.tronc.com/privacy-policy/\" onclick=\"ga('send', 'event','Global footer', 'Privacy');\">Privacy (Updated)</a></li>\n",
"<li><a href=\"http://www.tronc.com/central-terms-of-service/\" onclick=\"ga('send', 'event','Global footer', 'Terms');\">Terms</a></li>\n",
"</ul>\n",
"<ul>\n",
"<li><a href=\"/Chicago-Magazine/archive-index-test\" onclick=\"ga('send', 'event','Global footer', 'Archive');\">Archive</a></li>\n",
"<li><a href=\"/customerservice\" onclick=\"ga('send', 'event','Global footer', 'Customer service');\">Customer Service</a></li>\n",
"<li><a href=\"/newsletters\" onclick=\"ga('send', 'event','Global footer', 'Newsletters');\">Newsletters</a></li>\n",
"<li><a href=\"/subscribe\" onclick=\"ga('send', 'event','Global footer', 'Subscribe');\">Subscribe</a></li>\n",
"</ul>\n",
"</section>\n",
"<div class=\"credits\">\n",
"<p class=\"copyright\">©<span id=\"copyright-year\"></span> <em>Chicago</em> magazine / A Chicago Tribune Media Group website</p>\n",
"</div>\n",
"</nav>\n",
"</footer>\n",
"<!--[if lt IE 9]>\n",
"<script type=\"text/javascript\" language\"Javascript\">\n",
"console.log('Mutha ucking IE8');\n",
"jQuery('html').addClass('old-ie');\n",
"</script>\n",
"<![endif]-->\n",
"<script>\n",
"document.getElementById('copyright-year').innerHTML = new Date().getFullYear()\n",
"</script>\n",
"<!-- Chartbeat -->\n",
"<script type=\"text/javascript\">\n",
"var _sf_async_config={uid:3096,domain:\"chicagomag.com\"}; // ,useCanonical: true\n",
"\n",
" _sf_async_config.sections = \"Dining & Drinking\";\n",
"\n",
"\n",
"(function(){\n",
" function loadChartbeat() {\n",
" window._sf_endpt=(new Date()).getTime();\n",
" var e = document.createElement('script');\n",
" e.setAttribute('language', 'javascript');\n",
" e.setAttribute('type', 'text/javascript');\n",
" e.setAttribute('src',\n",
" ((\"https:\" == document.location.protocol) ? \"https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/\" : \"http://static.chartbeat.com/\") +\n",
" \"js/chartbeat.js\");\n",
" document.body.appendChild(e);\n",
" }\n",
" var oldonload = window.onload;\n",
" window.onload = (typeof window.onload != 'function') ?\n",
" loadChartbeat : function() { oldonload(); loadChartbeat(); };\n",
"})();\n",
"</script>\n",
"<!-- Google Custom Search Engine -->\n",
"<script type=\"text/javascript\">\n",
" (function() {\n",
" var cx = '010330565828956611806:7mfjr5payok'; //PROD\n",
" // var cx = '012184964769571027538:4alkqopmlde'; // DEV\n",
" var gcse = document.createElement('script');\n",
" gcse.type = 'text/javascript';\n",
" gcse.async = true;\n",
" gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +\n",
" '//www.google.com/cse/cse.js?cx=' + cx;\n",
" var s = document.getElementsByTagName('script')[0];\n",
" s.parentNode.insertBefore(gcse, s);\n",
" })();\n",
"</script>\n",
"<script src=\"https://www.sc.pages05.net/lp/static/js/iMAWebCookie.js?5d52baad-1411358527b-d7c8ec57ae636c7258d3eb0ef0e531f2&amp;h=www.pages05.net\" type=\"text/javascript\"></script>\n",
"<!-- Disqus -->\n",
"<!-- For Citi sponsorship (remove this conditional after Nov 2018) -->\n",
"<!-- -->\n",
"<script>\n",
" var disqus_shortname = 'chicagomag';\n",
" var disqus_identifier = '19493';\n",
" var disqus_title = 'The 50 Best Sandwiches in Chicago';\n",
" var disqus_url = 'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/';\n",
"\n",
" /* * * DON'T EDIT BELOW THIS LINE * * */\n",
" (function() {\n",
" var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n",
" dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';\n",
" (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n",
" })();\n",
"\n",
" (function () {\n",
" var s = document.createElement('script'); s.async = true;\n",
" s.type = 'text/javascript';\n",
" s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';\n",
" (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);\n",
" }());\n",
"</script>\n",
"<!-- -->\n",
"<!-- Clean up the lame Rivista pagination -->\n",
"<script type=\"text/javascript\">\n",
" var pb = jQuery('.page-break');\n",
" if (pb.length) {\n",
" var pagebreak = pb.html();\n",
" // Remove it from Page 1\n",
" if (pagebreak.substring(0,10) == \"(page 1 of\") {\n",
" pb.hide();\n",
" }\n",
" else if (pagebreak.substring(0,13) == \"<em>Page 1 of\") {\n",
" pb.hide();\n",
" }\n",
" else {\n",
" pagebreak = pagebreak.replace(\"(page\",\"<em>Page\");\n",
" pagebreak = pagebreak.replace(\")\",\"</em>\");\n",
" pb.html(pagebreak);\n",
" pb.css('display','inline-block');\n",
" }\n",
" }\n",
"</script>\n",
"<!--[if lt IE 9]>\n",
"<script type=\"text/javascript\" language=\"JavaScript\" src=\"/core/media/themes/Respond/js/respond.js?ver=1473876729\"></script>\n",
"<![endif]-->\n",
"<script language=\"JavaScript\" src=\"/core/media/js/base.js?ver=1473876728\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/core/media/themes/Respond/js/bootstrap.min.js?ver=1473876729\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"//maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/interstitial.js?ver=1524154906\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/newsletter-subscribe.js?ver=1524850607\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/RivistaGoogleDFP.js?ver=1447178886\" type=\"text/javascript\"></script>\n",
"<!-- godengo-monitor --></body>\n",
"</html>"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from bs4 import BeautifulSoup\n",
"from urllib.request import urlopen\n",
"\n",
"# url_base와 url_sub으로 나눠놓은 이유는 코드가 너무 길어짐을 방지하기 위해서!\n",
"url_base = 'http://www.chicagomag.com'\n",
"url_sub = '/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/'\n",
"url = url_base + url_sub\n",
"\n",
"html = urlopen(url)\n",
"soup = BeautifulSoup(html, \"html.parser\")\n",
"\n",
"soup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**```find_all``` 명령을 이용해서, 홈페이지에서 확인한 태그(```div 태그```에 class ```sammy```)를 찾기**"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.136396Z",
"start_time": "2020-05-28T00:14:30.111464Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">1</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\"><b>BLT</b><br>\r\n",
"Old Oak Tap<br>\n",
"<em>Read more</em> </br></br></a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">2</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Au-Cheval-Fried-Bologna/\"><b>Fried Bologna</b><br/>\r\n",
"Au Cheval<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">3</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Xoco-Woodland-Mushroom/\"><b>Woodland Mushroom</b><br/>\r\n",
"Xoco<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">4</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Als-Deli-Roast-Beef/\"><b>Roast Beef</b><br/>\r\n",
"Al’s Deli<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">5</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Publican-Quality-Meats-PB-L/\"><b>PB&amp;L</b><br/>\r\n",
"Publican Quality Meats<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">6</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Hendrickx-Belgian-Bread-Crafter-Belgian-Chicken-Curry-Salad/\"><b>Belgian Chicken Curry Salad</b><br/>\r\n",
"Hendrickx Belgian Bread Crafter<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">7</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Acadia-Lobster-Roll/\"><b>Lobster Roll</b><br/>\r\n",
"Acadia<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">8</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Birchwood-Kitchen-Smoked-Salmon-Salad/\"><b>Smoked Salmon Salad</b><br/>\r\n",
"Birchwood Kitchen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">9</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Cemitas-Puebla-Atomica-Cemitas/\"><b>Atomica Cemitas</b><br/>\r\n",
"Cemitas Puebla<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">10</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Nana-Grilled-Laughing-Bird-Shrimp-and-Fried-Oyster-Po-Boy/\"><b>Grilled Laughing Bird Shrimp and Fried Po’ Boy</b><br/>\r\n",
"Nana<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">11</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Lula-Cafe-Ham-and-Raclette-Panino/\"><b>Ham and Raclette Panino</b><br/>\r\n",
"Lula Cafe<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">12</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Ricobenes-Breaded-Steak/\"><b>Breaded Steak</b><br/>\r\n",
"Ricobene’s<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">13</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Frog-n-Snail-The-Hawkeye/\"><b>The Hawkeye</b><br/>\r\n",
"Frog n Snail<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">14</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Crosbys-Kitchen-Chicken-Dip/\"><b>Chicken Dip</b><br/>\r\n",
"Crosby’s Kitchen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">15</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Longman-and-Eagle-Wild-Boar-Sloppy-Joe/\"><b>Wild Boar Sloppy Joe</b><br/>\r\n",
"Longman &amp; Eagle<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">16</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Bari-Meatball-Sub/\"><b>Meatball Sub</b><br/>\r\n",
"Bari<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">17</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Mannys-Corned-Beef/\"><b>Corned Beef</b><br/>\r\n",
"Manny’s<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">18</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Eggys-Turkey-Club/\"><b>Turkey Club</b><br/>\r\n",
"Eggy’s<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">19</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Jerusalem-Falafel/\"><b>Falafel</b><br/>\r\n",
"Old Jerusalem<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">20</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Mindys-HotChocolate-Crab-Cake/\"><b>Crab Cake</b><br/>\r\n",
"Mindy’s HotChocolate<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">21</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Olgas-Delicatessen-Chicken-Schnitzel/\"><b>Chicken Schnitzel</b><br/>\r\n",
"Olga’s Delicatessen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">22</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Dawali-Mediterranean-Kitchen-Shawarma/\"><b>Shawarma</b><br/>\r\n",
"Dawali Mediterranean Kitchen<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">23</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Big-Jones-Toasted-Pimiento-Cheese/\"><b>Toasted Pimiento Cheese</b><br/>\r\n",
"Big Jones<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">24</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-La-Pane-Vegetarian-Panino/\"><b>Vegetarian Panino</b><br/>\r\n",
"La Pane<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">25</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Pastoral-Cali-Chevre/\"><b>Cali Chèvre</b><br/>\r\n",
"Pastoral<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">26</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Maxs-Deli-Pastrami/\"><b>Pastrami</b><br/>\r\n",
"Max’s Deli<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">27</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Luckys-Sandwich-Co-The-Fredo/\"><b>The Fredo</b><br/>\r\n",
"Lucky’s Sandwich Co.<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">28</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-City-Provisions-Smoked-Ham/\"><b>Smoked Ham</b><br/>\r\n",
"City Provisions<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">29</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Papas-Cache-Sabroso-Jibarito/\"><b>Jibarito</b><br/>\r\n",
"Papa’s Cache Sabroso<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">30</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Bavettes-Bar-and-Boeuf-Shaved-Prime-Rib/\"><b>Shaved Prime Rib</b><br/>\r\n",
"Bavette’s Bar &amp; Boeuf<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">31</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Hannahs-Bretzel-Serrano-Ham-and-Manchego-Cheese/\"><b>Serrano Ham and Manchego Cheese</b><br/>\r\n",
"Hannah’s Bretzel<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">32</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-La-Fournette-Tuna-Salad/\"><b>Tuna Salad</b><br/>\r\n",
"La Fournette<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">33</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Paramount-Room-Paramount-Reuben/\"><b>Paramount Reuben</b><br/>\r\n",
"Paramount Room<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">34</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Melt-Sandwich-Shoppe-The-Istanbul/\"><b>The Istanbul</b><br/>\r\n",
"Melt Sandwich Shoppe<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">35</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Floriole-Cafe-and-Bakery-BAD/\"><b>B.A.D.</b><br/>\r\n",
"Floriole Cafe &amp; Bakery<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">36</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-First-Slice-Pie-Cafe-Duck-Confit-and-Mozzarella/\"><b>Duck Confit and Mozzarella</b><br/>\r\n",
"First Slice Pie Café<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">37</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Troquet-Croque-Monsieur/\"><b>Croque Monsieur</b><br/>\r\n",
"Troquet<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">38</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Grahamwich-Green-Garbanzo/\"><b>Green Garbanzo</b><br/>\r\n",
"Grahamwich<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">39</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Saigon-Sisters-The-Hen-House/\"><b>The Hen House</b><br/>\r\n",
"Saigon Sisters<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">40</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Rosalias-Deli-Tuscan-Chicken/\"><b>Tuscan Chicken</b><br/>\r\n",
"Rosalia’s Deli<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">41</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Z-and-H-MarketCafe-The-Marty/\"><b>The Marty </b><br/>\r\n",
"Z&amp;H MarketCafe<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">42</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Market-House-on-the-Square-Whitefish/\"><b>Whitefish</b><br/>\r\n",
"Market House on the Square<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">43</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Elaines-Coffee-Call-Oat-Bread-Pecan-Butter-and-Fruit-Jam/\"><b>Oat Bread, Pecan Butter, and Fruit Jam</b><br/>\r\n",
"Elaine’s Coffee Call<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">44</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Marion-Street-Cheese-Market-Cauliflower-Melt/\"><b>Cauliflower Melt</b><br/>\r\n",
"Marion Street Cheese Market<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">45</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Cafecito-Cubano/\"><b>Cubana</b><br/>\r\n",
"Cafecito<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">46</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Chickpea-Kufta/\"><b>Kufta</b><br/>\r\n",
"Chickpea<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">47</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-The-Goddess-and-Grocer-Debbies-Egg-Salad/\"><b>Debbie’s Egg Salad</b><br/>\r\n",
"The Goddess and Grocer<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">48</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Zenwich-Beef-Curry/\"><b>Beef Curry</b><br/>\r\n",
"Zenwich<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">49</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Toni-Patisserie-Le-Vegetarien/\"><b>Le Végétarien</b><br/>\r\n",
"Toni Patisserie<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>, <div class=\"sammy\" style=\"position: relative; border-bottom: 0\">\n",
"<div class=\"sammyRank\">50</div>\n",
"<div class=\"sammyListing\"><a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Phoebes-Bakery-The-Gatsby/\"><b>The Gatsby</b><br/>\r\n",
"Phoebe’s Bakery<br/>\n",
"<em>Read more</em> </a></div>\n",
"</div>]\n"
]
}
],
"source": [
"print(soup.find_all('div', 'sammy'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 내가 찾고자 하는 내용이 맞는지 더 확실하게 확인해보기 위해, ```len``` 명령으로 길이를 확인!\n",
" - 길이가 50 으로 나왔는데, 시카고 매거진의 기사 제목에서 알 수 있듯이 시카고 샌드위치 맛집 50 곳에 대한 정보를 보여주므로, 일단 정확하게 찾은 것 같다!"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.156343Z",
"start_time": "2020-05-28T00:14:30.138391Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"50"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(soup.find_all('div', 'sammy'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 내가 찾고자 했던 내용이 맞다!!"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.179281Z",
"start_time": "2020-05-28T00:14:30.159352Z"
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<div class=\"sammy\" style=\"position: relative;\">\n",
"<div class=\"sammyRank\">1</div>\n",
"<div class=\"sammyListing\"><a href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\"><b>BLT</b><br>\r\n",
"Old Oak Tap<br>\n",
"<em>Read more</em> </br></br></a></div>\n",
"</div>\n"
]
}
],
"source": [
"print(soup.find_all('div', 'sammy')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 접근한 웹 페이지에서 원하는 데이터 추출하고 정리하기\n",
"**이제 ```div``` 의 ```sammy``` 태그에서 우리가 원하는 정보를 얻는 과정을 진행하겠다**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- ```find_all``` 명령으로 찾은 결과가 아래와 같은 형태로 출력된다면, 그 변수에 다시 태그로 찾는 ```find```, ```find_all``` 명령을 사용할 수 있다"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.197241Z",
"start_time": "2020-05-28T00:14:30.182275Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"bs4.element.Tag"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tmp_one = soup.find_all('div', 'sammy')[0]\n",
"type(tmp_one)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.208204Z",
"start_time": "2020-05-28T00:14:30.200225Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<div class=\"sammyRank\">1</div>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tmp_one.find(class_ = 'sammyRank')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 랭킹 확인"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.218179Z",
"start_time": "2020-05-28T00:14:30.211197Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'1'"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tmp_one.find(class_ = 'sammyRank').get_text()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- ```sammyListing```을 얻으면, *메뉴 이름* 과 *가게 이름* 을 얻을 수 있다\n",
" - 그러나 *메뉴 이름* 과 *가게 이름* 이 같이 붙어있다\n",
" - 때문에 밑에서 \"정규식\"을 사용해서 분리시켜줄 것이다!"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.228150Z",
"start_time": "2020-05-28T00:14:30.221171Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'BLT\\r\\nOld Oak Tap\\nRead more '"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tmp_one.find(class_ = 'sammyListing').get_text()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- a 태그에서 href 정보를 가지고 클릭했을 때, 연결될 주소 저장하기"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.238125Z",
"start_time": "2020-05-28T00:14:30.231143Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/'"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tmp_one.find('a')['href']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**정규식을 사용한 '메뉴 이름'과 '가게 이름'을 분할**\n",
"- 위의 결과를 보면, \\n 또는 \\r\\n 의 패턴으로 분할시켜줘야 함을 알 수 있다\n",
" - 따라서 split 기준을 '```\\n|\\r\\n```'으로 설정!!"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.249095Z",
"start_time": "2020-05-28T00:14:30.241117Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BLT\n",
"Old Oak Tap\n"
]
}
],
"source": [
"import re # 정규식을 쓰기 위해 필요한 모듈!\n",
"\n",
"tmp_string = tmp_one.find(class_ = 'sammyListing').get_text()\n",
"\n",
"re.split(('\\n|\\r\\n'), tmp_string)\n",
"\n",
"print(re.split(('\\n|\\r\\n'), tmp_string)[0]) # 메뉴 이름\n",
"print(re.split(('\\n|\\r\\n'), tmp_string)[1]) # 가게 이름"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**샌드위치 맛집 리스트 50개 각각에 대해서 절대경로로 잡힌 url은 그대로 두고, 상대경로로 잡힌 url은 절대경로로 변경!**\n",
"- ```urllib``` 에 있는 ```urljoin``` 이라는 명령을 사용"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.284999Z",
"start_time": "2020-05-28T00:14:30.252088Z"
}
},
"outputs": [],
"source": [
"from urllib.parse import urljoin\n",
"\n",
"rank = []\n",
"main_menu = []\n",
"cafe_name = []\n",
"url_add = []\n",
"\n",
"list_soup = soup.find_all('div', 'sammy')\n",
"\n",
"for item in list_soup:\n",
" rank.append(item.find(class_ = 'sammyRank').get_text()) # 맛집 랭크 순위\n",
" \n",
" tmp_string = item.find(class_ = 'sammyListing').get_text()\n",
" \n",
" main_menu.append(re.split(('\\n|\\r\\n'), tmp_string)[0]) # 메뉴 이름\n",
" cafe_name.append(re.split(('\\n|\\r\\n'), tmp_string)[1]) # 가게 이름\n",
" \n",
" url_add.append(urljoin(url_base, item.find('a')['href']))"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.294972Z",
"start_time": "2020-05-28T00:14:30.287991Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['1', '2', '3', '4', '5']"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rank[:5]"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.304946Z",
"start_time": "2020-05-28T00:14:30.297965Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['BLT', 'Fried Bologna', 'Woodland Mushroom', 'Roast Beef', 'PB&L']"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"main_menu[:5]"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.315916Z",
"start_time": "2020-05-28T00:14:30.307938Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['Old Oak Tap', 'Au Cheval', 'Xoco', 'Al’s Deli', 'Publican Quality Meats']"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cafe_name[:5]"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.327883Z",
"start_time": "2020-05-28T00:14:30.318908Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/',\n",
" 'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Au-Cheval-Fried-Bologna/',\n",
" 'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Xoco-Woodland-Mushroom/',\n",
" 'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Als-Deli-Roast-Beef/',\n",
" 'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Publican-Quality-Meats-PB-L/']"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url_add[:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 4개의 변수 길이를 확인해보니 모두 50개로, 위에서 처리해준 작업이 잘 수행됐음을 알 수 있다"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.338855Z",
"start_time": "2020-05-28T00:14:30.331874Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(50, 50, 50, 50)"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(rank), len(main_menu), len(cafe_name), len(url_add)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**pandas 라이브러리를 활용해서 4개의 리스트 합치기**\n",
"- 하나의 데이터 프레임으로 만들어주기!"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.946091Z",
"start_time": "2020-05-28T00:14:30.341847Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Rank</th>\n",
" <th>Menu</th>\n",
" <th>Cafe</th>\n",
" <th>URL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>BLT</td>\n",
" <td>Old Oak Tap</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>Fried Bologna</td>\n",
" <td>Au Cheval</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>Woodland Mushroom</td>\n",
" <td>Xoco</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>Roast Beef</td>\n",
" <td>Al’s Deli</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>PB&amp;L</td>\n",
" <td>Publican Quality Meats</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Rank Menu Cafe \\\n",
"0 1 BLT Old Oak Tap \n",
"1 2 Fried Bologna Au Cheval \n",
"2 3 Woodland Mushroom Xoco \n",
"3 4 Roast Beef Al’s Deli \n",
"4 5 PB&L Publican Quality Meats \n",
"\n",
" URL \n",
"0 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"1 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"2 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"3 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"4 http://www.chicagomag.com/Chicago-Magazine/Nov... "
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"data = {'Rank':rank, 'Menu':main_menu, 'Cafe':cafe_name, 'URL':url_add}\n",
"df = pd.DataFrame(data)\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 칼럼들의 순서를 보기좋게 다시 정렬"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.975014Z",
"start_time": "2020-05-28T00:14:30.954070Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Rank</th>\n",
" <th>Cafe</th>\n",
" <th>Menu</th>\n",
" <th>URL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Old Oak Tap</td>\n",
" <td>BLT</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>Au Cheval</td>\n",
" <td>Fried Bologna</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>Xoco</td>\n",
" <td>Woodland Mushroom</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>Al’s Deli</td>\n",
" <td>Roast Beef</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>Publican Quality Meats</td>\n",
" <td>PB&amp;L</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Rank Cafe Menu \\\n",
"0 1 Old Oak Tap BLT \n",
"1 2 Au Cheval Fried Bologna \n",
"2 3 Xoco Woodland Mushroom \n",
"3 4 Al’s Deli Roast Beef \n",
"4 5 Publican Quality Meats PB&L \n",
"\n",
" URL \n",
"0 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"1 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"2 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"3 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"4 http://www.chicagomag.com/Chicago-Magazine/Nov... "
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(data, columns = ['Rank', 'Cafe', 'Menu', 'URL'])\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**위의 과정들을 거쳐 만들어진 df 데이터를, csv 파일로 내보내는 코드는 따로 실행하지 않겠다**\n",
"\n",
"**(이미 data 폴더에 해당 데이터가 존재하기 때문)**"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:30.984987Z",
"start_time": "2020-05-28T00:14:30.980000Z"
}
},
"outputs": [],
"source": [
"# df.to_csv(\"../data/03. best_sandwiches_list_chicago.csv\", sep = ',', encoding = 'UTF-8')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 다수의 웹 페이지에 자동으로 접근해서 원하는 정보 가져오기\n",
"- 시카고의 베스트 샌드위치 가게 50개의 세부 메뉴를 설명하는 곳을 클릭하면, 각각 또 다른 매거진 기사로 연결된다\n",
"- 앞에서 수행한대로 해당 페이지에 들어가서 '개발자 도구'를 사용하여 태그를 찾으면, ```p 태그```에 ```addy``` class 인 것을 알 수 있다!"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:31.017899Z",
"start_time": "2020-05-28T00:14:30.987978Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Rank</th>\n",
" <th>Cafe</th>\n",
" <th>Menu</th>\n",
" <th>URL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Old Oak Tap</td>\n",
" <td>BLT</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>Au Cheval</td>\n",
" <td>Fried Bologna</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>Xoco</td>\n",
" <td>Woodland Mushroom</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>Al’s Deli</td>\n",
" <td>Roast Beef</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>Publican Quality Meats</td>\n",
" <td>PB&amp;L</td>\n",
" <td>http://www.chicagomag.com/Chicago-Magazine/Nov...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Rank Cafe Menu \\\n",
"0 1 Old Oak Tap BLT \n",
"1 2 Au Cheval Fried Bologna \n",
"2 3 Xoco Woodland Mushroom \n",
"3 4 Al’s Deli Roast Beef \n",
"4 5 Publican Quality Meats PB&L \n",
"\n",
" URL \n",
"0 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"1 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"2 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"3 http://www.chicagomag.com/Chicago-Magazine/Nov... \n",
"4 http://www.chicagomag.com/Chicago-Magazine/Nov... "
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('../data/03. best_sandwiches_list_chicago.csv', index_col = 0)\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**위 표에서 URL 컬럼에 있는 내용을 50개 읽어서 각 페이지에서 정보 가져오기**\n",
"- 가져올 정보 리스트: *가게 주소, 대표 샌드위치 가격, 가게 전화번호*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 먼저 첫 번째 URL에 대해서 해당 작업을 연습해보고, 그 후에 for문을 사용하여 50개에 대해 일괄적으로 적용시키겠다!"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:31.030863Z",
"start_time": "2020-05-28T00:14:31.022885Z"
},
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/'"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['URL'][0]"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:35.909544Z",
"start_time": "2020-05-28T00:14:31.033857Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"<!DOCTYPE html>\n",
"\n",
"<html lang=\"en\">\n",
"<head>\n",
"<!-- Urbis magnitudo. Fabulas magnitudo. -->\n",
"<meta charset=\"utf-8\"/>\n",
"<style>a.edit_from_site {display: none !important;}</style>\n",
"<title>\n",
" 1. Old Oak Tap BLT |\n",
" Chicago magazine\n",
" | November 2012\n",
" </title>\n",
"<meta content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable = no\" name=\"viewport\">\n",
"<meta content=\"“Truly inspired.”\" name=\"description\"/>\n",
"<!-- <meta name=\"description\" content=\"&#8220;Truly inspired.&#8221;\"> -->\n",
"<meta content=\"\" name=\"keywords\"/>\n",
"<meta content=\"37873197144\" property=\"fb:pages\">\n",
"<link href=\"//www.googletagservices.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//ajax.googleapis.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//securepubads.g.doubleclick.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//media.chicagomag.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//ox-d.godengo.com/\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.google-analytics.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//ping.chartbeat.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//static.chartbeat.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.google.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//cse.google.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.googleapis.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//maps.googleapis.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//csi.gstatic.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.facebook.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//staticxx.facebook.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//connect.facebook.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//contentz.mkt51.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.pages05.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//fbcdn.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//players.brightcove.net\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//edge.api.brightcove.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//metrics.brightcove.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//c.brightcove.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//pvp.trb.com\" rel=\"dns-prefetch\"/>\n",
"<!-- For Citi sponsorship (move these to above ^^ links after Nov 2018) -->\n",
"<!-- -->\n",
"<!-- DOES NOT HAVE REAL ESTATE CATEGORY OR IS NOT REAL ESTATE HOMEPAGE -->\n",
"<link href=\"//chicagomag.disqus.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//www.disqus.com\" rel=\"dns-prefetch\"/>\n",
"<link href=\"//a.disquscdn.com\" rel=\"dns-prefetch\"/>\n",
"<!-- -->\n",
"<link href=\"https://use.typekit.net/vdh5vgk.css\" rel=\"stylesheet\"/>\n",
"<meta content=\"www.pages05.net,chicagomag.com\" name=\"com.silverpop.brandeddomains\">\n",
"<script>\n",
"(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n",
"(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n",
"m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n",
"})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n",
"\n",
"ga('create', 'UA-297666-1', {'siteSpeedSampleRate': 100});\n",
"\n",
"\n",
"\n",
"ga('set', 'dimension1', 'restaurant')\n",
"\n",
"\n",
"\n",
" ga('set', 'dimension4', '2012-10-09 18:13:00');\n",
"\n",
" ga('set', 'dimension5', 'article.tpl');\n",
"\n",
"ga('send', 'pageview');\n",
"\n",
"\n",
"var trackOutboundLink = function(url) {\n",
" ga('send', 'event', 'outbound', 'click', url, {\n",
" 'transport': 'beacon',\n",
" 'hitCallback': function(){document.location = url;}\n",
" });\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"</script>\n",
"<link href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" rel=\"canonical\">\n",
"<meta content=\"1. Old Oak Tap BLT\" name=\"title\"/>\n",
"<meta content=\"all\" name=\"robots\"/>\n",
"<meta content=\"chicago magazine, chicago magazine online, chicago guide, chicago recreation, chicago restaurants, chicago events, chicago entertainment, chicago attractions, chicago outdoor, chicago dining, chicago bars, chicago nightlife, chicago shopping, chicago fashion, chicago arts, chicago culture\" name=\"news_keywords\"/>\n",
"<!-- -->\n",
"<link href=\"/images/cache/cache_3/cache_9/cache_8/01-Old-Oak-Trap-BLT-500-79e34893.jpeg?ver=1482330137&amp;aspectratio=1.3333333333333\" rel=\"image_src\">\n",
"<meta content=\"/images/cache/cache_3/cache_9/cache_8/01-Old-Oak-Trap-BLT-500-79e34893.jpeg?ver=1482330137&amp;aspectratio=1.3333333333333\" name=\"thumbnail\"/>\n",
"<script type=\"text/javascript\">var _sf_startpt=(new Date()).getTime()</script>\n",
"<link href=\"http://media.chicagomag.com/favicon.ico\" rel=\"shortcut icon\"/>\n",
"<!-- Global site tag (gtag.js) - Google Ads: 754499588 -->\n",
"<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-754499588\"></script>\n",
"<script>\n",
" window.dataLayer = window.dataLayer || [];\n",
" function gtag(){dataLayer.push(arguments);}\n",
" gtag('js', new Date());\n",
"\n",
" gtag('config', 'AW-754499588');\n",
"</script>\n",
"<style>\n",
" .ad { z-index: 9999999 !important; }\n",
"</style>\n",
"<meta content=\"summary_large_image\" name=\"twitter:card\"/>\n",
"<meta content=\"/images/cache/cache_b/cache_b/cache_5/01-Old-Oak-Trap-BLT-500-ef23e5bb.jpeg?ver=1482330137&amp;aspectratio=1.3333333333333\" name=\"twitter:image\"/>\n",
"<meta content=\"/images/cache/cache_d/cache_4/cache_e/01-Old-Oak-Trap-BLT-500-a09efe4d.jpeg?ver=1482330137&amp;aspectratio=1.3333333333333\" property=\"og:image\"/>\n",
"<meta content=\"Chicago magazine\" name=\"twitter:app:name:ipad\"/>\n",
"<meta content=\"567851357\" name=\"twitter:app:id:ipad\"/>\n",
"<meta content=\"Chicago magazine\" name=\"twitter:app:name:googleplay\"/>\n",
"<meta content=\"com.chicagomag.chicagomag\" name=\"twitter:app:id:googleplay\"/>\n",
"<meta content=\"1. Old Oak Tap BLT\" property=\"og:title\">\n",
"<meta content=\"1. Old Oak Tap BLT\" name=\"twitter:title\">\n",
"<meta content=\"article\" property=\"og:type\">\n",
"<meta content=\"bikesarefun\" property=\"fb:admins\">\n",
"<meta content=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" property=\"og:url\">\n",
"<meta content=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" name=\"twitter:url\">\n",
"<meta content=\"Chicago magazine\" property=\"og:site_name\">\n",
"<meta content='\"Truly inspired.\"' property=\"og:description\"/>\n",
"<meta content='\"Truly inspired.\"' name=\"twitter:description\"/>\n",
"<meta content=\"@chicagomag\" name=\"twitter:site\"/>\n",
"<script type=\"text/javascript\">\n",
" var articleID = '19495';\n",
" var adcat = \"restaurant\";\n",
"\n",
" // Set the video variables\n",
" var videoID = \"Inside Best Restaurants\";// Fallback\n",
" \n",
" // adcat: restaurant\n",
" var videoID = \"Inside Best Restaurants\";\n",
" \n",
" \n",
"</script>\n",
"<script type=\"text/javascript\">\n",
"\n",
" // Asynchronous\n",
" var googletag = googletag || {};\n",
" googletag.cmd = googletag.cmd || [];\n",
"\n",
" // Set some global variables so we can refresh these slots asynchronously\n",
" var cube2 = '',\n",
" leaderboard1 = '',\n",
" leaderboard6 = '';\n",
" (function() {\n",
" var gads = document.createElement(\"script\");\n",
" gads.async = true;\n",
" gads.type = \"text/javascript\";\n",
" var useSSL = \"https:\" == document.location.protocol;\n",
" gads.src = (useSSL ? \"https:\" : \"http:\") + \"//www.googletagservices.com/tag/js/gpt.js\";\n",
" var node =document.getElementsByTagName(\"script\")[0];\n",
" node.parentNode.insertBefore(gads, node);\n",
" })();\n",
"\n",
"</script>\n",
"<script type=\"text/javascript\">\n",
" googletag.cmd.push(function() {\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" cube2 = googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-3').setTargeting('pos',['3']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-4').setTargeting('pos',['4']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-5').setTargeting('pos',['5']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,250]],'div-gpt-ad-cube-6').setTargeting('pos',['6']).addService(googletag.pubads());\n",
"\n",
" if (window.innerWidth > 727) {\n",
" leaderboard1 = googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-3').setTargeting('pos',['3']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-4').setTargeting('pos',['4']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-5').setTargeting('pos',['5']).addService(googletag.pubads());\n",
" leaderboard6 = googletag.defineSlot('/4011/trb.chicagomag/hp', [[728,90]],'div-gpt-ad-leaderboard-6').setTargeting('pos',['6']).addService(googletag.pubads());\n",
" }\n",
" else {\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[320,50]],'div-gpt-ad-mobile-leaderboard-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[320,50]],'div-gpt-ad-mobile-leaderboard-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" }\n",
"\n",
" // googletag.defineSlot('/4011/trb.chicagomag/hp', [[160,600]],'div-gpt-ad-999449422057474470-6').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" // googletag.defineSlot('/4011/trb.chicagomag/hp', [[160,600]],'div-gpt-ad-999449422057474470-7').setTargeting('pos',['2']).addService(googletag.pubads());\n",
"\n",
" if (window.innerWidth > 599) {\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,100]],'div-gpt-ad-600-100').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,400]],'div-gpt-ad-600-400-1').setTargeting('pos',['1']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,400]],'div-gpt-ad-600-400-2').setTargeting('pos',['2']).addService(googletag.pubads());\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[600,400]],'div-gpt-ad-600-400-3').setTargeting('pos',['3']).addService(googletag.pubads());\n",
" }\n",
"\n",
"\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[336,392]],'div-gpt-ad-999449422057474470-9').setTargeting('pos',['1']).addService(googletag.pubads());\n",
"\n",
" googletag.defineSlot('/4011/trb.chicagomag/hp', [[300,100]],'div-gpt-ad-video-companion').addService(googletag.pubads());\n",
"\n",
" googletag.defineOutOfPageSlot('/4011/trb.chicagomag/hp', 'div-out-of-page').addService(googletag.pubads());\n",
"\n",
" // Custom chicago mag targeting\n",
"\n",
" googletag.pubads().setTargeting(\"adcat\", \"restaurant\");\n",
" googletag.pubads().setTargeting(\"pub\", \"chi\");\n",
" googletag.pubads().setTargeting(\"pubID\", \"100\");\n",
" googletag.pubads().setTargeting(\"videoID\", videoID);\n",
" googletag.pubads().collapseEmptyDivs();\n",
" \n",
" googletag.pubads().setTargeting(\"articleID\", \"19495\");\n",
" \n",
" \n",
" googletag.enableServices();\n",
"\n",
" });// End googletag.cmd.push()\n",
"\n",
"</script>\n",
"<!-- End: GPT -->\n",
"<!-- responsive -->\n",
"<script language=\"Javascript\" src=\"//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js\" type=\"text/javascript\"></script>\n",
"<script type=\"text/javascript\">\n",
"if (typeof jQuery == 'undefined') {\n",
"\tdocument.write(unescape(\"%3Cscript src='/core/media/js/jquery-1.8.1.min.js' type='text/javascript'%3E%3C/script%3E\"));\n",
"}\n",
"</script>\n",
"<script type=\"text/javascript\">\n",
"var rjQuery = jQuery.noConflict(); // leave the $ variable alone\n",
"</script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/site-search.js?ver=1386069772\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/core/media/js/base.js?ver=1473876728\" type=\"text/javascript\"></script>\n",
"<!--[if lt IE 9]>\n",
"<script type=\"text/javascript\" language=\"JavaScript\" src=\"/core/media/themes/Respond/js/html5_shiv.js?ver=1473876729\"></script>\n",
"<![endif]-->\n",
"<script language=\"JavaScript\" src=\"/core/media/js/jquery.browser.js?ver=1473876728\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/jquery.iframe-auto-height.plugin.1.8.0.js?ver=1446756854\" type=\"text/javascript\"></script>\n",
"<link href=\"/lessc/35a3627424516b7ccf4314a41b92358c.one.css?ver=1540232190\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<link href=\"/lessc/35a3627424516b7ccf4314a41b92358c.two.css?ver=1540232190\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/functions.js?ver=1483891934\" type=\"text/javascript\"></script>\n",
"<link href=\"/core/media/css/responsive_ads.css?ver=1473876728\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<link href=\"/theme_overrides/Respond/css/sandwiches.css?ver=1473559134\" rel=\"stylesheet\" type=\"text/css\"/>\n",
"<!--[if IE 9]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/core/media/themes/Respond/css/ie9.css?ver=1473876729\">\n",
"<![endif]-->\n",
"<!--[if lt IE 9]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/core/media/themes/Respond/css/ie8.css?ver=1473876729\">\n",
"<![endif]-->\n",
"<script type=\"text/javascript\">RivistaJSString.put({\n",
"\n",
"\n",
"\n",
"\n",
"\"_\":\"\"});</script>\n",
"<!--[if lt IE 9]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/theme_overrides/Respond/css/chimag-ie8.css?ver=1443881828\">\n",
"<![endif]-->\n",
"<!--[if gt IE 7]>\n",
"<link rel=\"stylesheet\" type=\"text/css\" href=\"/theme_overrides/Respond/css/chimag-ie.css?ver=1381349768\">\n",
"<![endif]-->\n",
"<script>\n",
"var ad_category = \"Restaurants and Bars\";\n",
"</script>\n",
"<script>\n",
"window.editorIdMap = new Object;\n",
"editorIdMap['120'] = {'mid': 1425,'view': 'edit_report'};\n",
"editorIdMap['120'] = {'mid': 1426,'view': 'edit_report'};\n",
"editorIdMap['122'] = {'mid': 1431,'view': 'edit_gateway'};\n",
"editorIdMap['77'] = {'mid': 1350,'view': 'edit_config'};\n",
"editorIdMap['11'] = {'mid': 1387,'view': 'edit_user'};\n",
"editorIdMap['80'] = {'mid': 1423,'view': ''};\n",
"editorIdMap['80'] = {'mid': 1421,'view': ''};\n",
"editorIdMap['60'] = {'mid': 1328,'view': ''};\n",
"editorIdMap['60'] = {'mid': 1327,'view': ''};\n",
"editorIdMap['136'] = {'mid': 1491,'view': 'edit_comment'};\n",
"editorIdMap['60'] = {'mid': 1322,'view': ''};\n",
"editorIdMap['138'] = {'mid': 1492,'view': ''};\n",
"editorIdMap['133'] = {'mid': 1488,'view': ''};\n",
"editorIdMap['19'] = {'mid': 81,'view': 'edit_moduledefinition'};\n",
"editorIdMap['21'] = {'mid': 694,'view': 'edit_module'};\n",
"editorIdMap['16'] = {'mid': 1386,'view': 'edit_group'};\n",
"editorIdMap['128'] = {'mid': 1479,'view': 'edit_issueperiod'};\n",
"editorIdMap['79'] = {'mid': 1333,'view': 'edit_publication'};\n",
"editorIdMap['78'] = {'mid': 1334,'view': 'edit_issue'};\n",
"editorIdMap['97'] = {'mid': 1357,'view': 'edit_content'};\n",
"editorIdMap['94'] = {'mid': 1388,'view': ''};\n",
"editorIdMap['17'] = {'mid': 1389,'view': 'edit_menu'};\n",
"editorIdMap['72'] = {'mid': 1422,'view': 'edit_product'};\n",
"editorIdMap['2'] = {'mid': 1332,'view': ''};\n",
"editorIdMap['2'] = {'mid': 1339,'view': ''};\n",
"editorIdMap['60'] = {'mid': 1329,'view': ''};\n",
"editorIdMap['98'] = {'mid': 1336,'view': 'edit_survey'};\n",
"editorIdMap['85'] = {'mid': 1338,'view': 'edit_newsletter'};\n",
"editorIdMap['86'] = {'mid': 1337,'view': 'edit_gallery'};\n",
"editorIdMap['123'] = {'mid': 1473,'view': 'edit_calendar'};\n",
"editorIdMap['140'] = {'mid': 1493,'view': 'edit_menu'};\n",
"editorIdMap['116'] = {'mid': 1406,'view': 'edit_wrapper'};\n",
"editorIdMap['118'] = {'mid': 1419,'view': 'edit_form'};\n",
"editorIdMap['132'] = {'mid': 1489,'view': 'edit_geobase'};\n",
"editorIdMap['134'] = {'mid': 1490,'view': 'edit_videochannel'};\n",
"editorIdMap['130'] = {'mid': 1480,'view': 'edit_pageposition'};\n",
"editorIdMap['117'] = {'mid': 1418,'view': 'edit_campaign'};\n",
"editorIdMap['69'] = {'mid': 1424,'view': 'edit_category'};\n",
"editorIdMap['115'] = {'mid': 1335,'view': 'edit_page'};\n",
"editorIdMap['60'] = {'mid': 1325,'view': ''};\n",
"editorIdMap['121'] = {'mid': 1430,'view': 'edit_shipcarrier'};\n",
"editorIdMap['2'] = {'mid': 1340,'view': ''};\n",
"editorIdMap['144'] = {'mid': 1495,'view': 'edit_recurring'};\n",
"editorIdMap['146'] = {'mid': 1499,'view': 'edit_section'};\n",
"editorIdMap['148'] = {'mid': 1501,'view': ''};\n",
"editorIdMap['153'] = {'mid': 1505,'view': ''};\n",
"editorIdMap['154'] = {'mid': 1506,'view': ''};\n",
"editorIdMap['155'] = {'mid': 1507,'view': ''};\n",
"editorIdMap['115'] = {'mid': 1360,'view': 'edit_page'};\n",
"editorIdMap['126'] = {'mid': 1478,'view': 'edit_customtable'};\n",
"editorIdMap['147'] = {'mid': 1500,'view': ''};\n",
"editorIdMap['150'] = {'mid': 1502,'view': ''};\n",
"editorIdMap['149'] = {'mid': 1503,'view': ''};\n",
"editorIdMap['131'] = {'mid': 1481,'view': 'edit_tag'};\n",
"editorIdMap['145'] = {'mid': 1496,'view': 'edit_redirect'};\n",
"editorIdMap['143'] = {'mid': 1494,'view': 'edit_creditcardtype'};\n",
"editorIdMap['156'] = {'mid': 1510,'view': ''};\n",
"editorIdMap['119'] = {'mid': 1420,'view': 'edit_user'};\n",
"editorIdMap['126'] = {'mid': 1512,'view': 'edit_customtable'};\n",
"editorIdMap['158'] = {'mid': 1513,'view': ''};\n",
"editorIdMap['157'] = {'mid': 1511,'view': ''};\n",
"var pagetype = 'article';\n",
"var admin_edit_itemid = '19495';\n",
"var admin_edit_text = 'Edit Article';\n",
"var admin_edit_link_extras = '';\n",
"editorIdMap['article'] = {'mid': 1335,'view': 'edit_page'};\n",
"editorIdMap['content'] = {'mid': 1360,'view': 'edit_page'};\n",
"editorIdMap['cde'] = {'mid': 1512,'view': 'edit_customtable'};\n",
"editorIdMap['cde_record'] = {'mid': 1512,'view': 'edit_customdata'};\n",
"editorIdMap['evergreen'] = {'mid': 1335,'view': 'edit_page'};\n",
"editorIdMap['issue'] = {'mid': 1360,'view': 'edit_page'};\n",
"editorIdMap['publication'] = {'mid': 1360,'view': 'edit_page'};\n",
"</script>\n",
"<script src=\"/theme_overrides/Respond/js/edit_from_site.js?ver=1446828087\"></script><link href=\"/core/media/css/edit_from_site.css\" rel=\"stylesheet\" type=\"text/css\"/></meta></meta></meta></meta></meta></meta></meta></link></link></meta></meta></meta></head>\n",
"<body class=\"land long tpl-article din\" id=\"page_htmlid_19495\">\n",
"<script>\n",
" var timestamp = 'May%2027%202020%2019:14';\n",
"</script>\n",
"<style>\n",
"/*--- Mobile Reveal bar ---*/\n",
"#reveal-bar-mobile {\n",
" background: rgba(255,255,255,.95);\n",
" border-bottom: 1px solid #aaa;\n",
" display: none;\n",
" padding: 11px 10px 9px 0;\n",
" position: fixed;\n",
" width: 100%;\n",
" -webkit-transform: translate3d(0,-80px,0);\n",
" -moz-transform : translate3d(0,-80px,0);\n",
" -o-transform : translate3d(0,-80px,0);\n",
" -mstransform : translate3d(0,-80px,0);\n",
" transform : translate3d(0,-80px,0);\n",
" transition : 1s ease-in-out;\n",
" z-index : 99999;\n",
"}\n",
"#reveal-bar-mobile.reveal-bar-show {\n",
" -webkit-transform: translate3d(0,0,0);\n",
" -moz-transform: translate3d(0,0,0);\n",
" -o-transform: translate3d(0,0,0);\n",
" -mstransform: translate3d(0,0,0);\n",
" transform: translate3d(0,0,0);\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons {\n",
" float: right;\n",
" margin-right: 10px;\n",
" /*width: 72px;*/\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons li {\n",
" margin: 0 5px;\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons li a {\n",
" height: 30px;\n",
" width: 30px;\n",
" border-radius: 15px;\n",
" padding-top: 6px;\n",
"}\n",
"#reveal-bar-mobile .reveal-share-buttons li i {\n",
" font-size: 18px;\n",
"}\n",
"\n",
"button#reveal-bar-mobile-sections-button {\n",
" background: none;\n",
" color: #666;\n",
" font-size: 16px;\n",
" font-style: normal;\n",
"\n",
" margin: 0;\n",
" padding: 8px 10px 5px;\n",
"}\n",
"\n",
".reveal-bar-mobile-section {\n",
" width: 100%;\n",
"}\n",
"\n",
".reveal-bar-mobile-section-link,\n",
".reveal-bar-mobile-section-link:hover,\n",
".reveal-bar-mobile-section-link:active,\n",
".reveal-bar-mobile-section-link:visited {\n",
" background: #222;\n",
" border-bottom: 1px solid #aaa;\n",
" -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;\n",
" color: #f0f0f0;\n",
" display: table-cell;\n",
" font-family: \"proxima-nova\",sans-serif;\n",
" font-size: 20px;\n",
" padding: 0 10px;\n",
" vertical-align: middle;\n",
" width: 100%;\n",
"}\n",
"..reveal-bar-mobile-section-link:on\n",
".reveal-bar-mobile-section-link.reveal-bar-mobile-section-link-close {\n",
" font-size: 16px;\n",
" font-weight: 100%;\n",
" padding-right: 20px;\n",
" /*text-align: right;*/\n",
" text-transform: uppercase;\n",
"}\n",
"\n",
"#reveal-bar-mobile-sections {\n",
" display: none;\n",
" position: fixed;\n",
" top: 20px;\n",
" -webkit-transform: translate3d(0,-800px,0);\n",
" -moz-transform : translate3d(0,-800px,0);\n",
" -o-transform : translate3d(0,-800px,0);\n",
" -mstransform : translate3d(0,-800px,0);\n",
" transform : translate3d(0,-800px,0);\n",
" transition : .5s ease-in-out;\n",
" width: 100%;\n",
" z-index: 998;\n",
"}\n",
"#reveal-bar-mobile-sections.show {\n",
" -webkit-transform: translate3d(0,0,0);\n",
" -moz-transform : translate3d(0,0,0);\n",
" -o-transform : translate3d(0,0,0);\n",
" -mstransform : translate3d(0,0,0);\n",
" transform : translate3d(0,0,0);\n",
"}\n",
"\n",
"@media only screen and (max-width : 450px) {\n",
" #reveal-bar-mobile {\n",
" display: block;\n",
" }\n",
"}\n",
"</style>\n",
"<div id=\"reveal-bar-mobile\">\n",
"<button id=\"reveal-bar-mobile-sections-button\">More →</button>\n",
"<ul class=\"reveal-share-buttons list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20mobile%20reveal%20bar%2019495%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event', 'Sharing', 'Facebook share from mobile reveal bar','1. Old Oak Tap BLT'); return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20mobile%20reveal%20bar%2019495%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=1.+Old+Oak+Tap+BLT&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" onclick=\"ga('send', 'event', 'Sharing', 'Tweet story from mobile reveal bar','1. Old Oak Tap BLT'); return tweetPopup('1.+Old+Oak+Tap+BLT','/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/','mobile+reveal+bar+19495');\" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"</ul>\n",
"</div>\n",
"<ul class=\"list-no-bullets\" id=\"reveal-bar-mobile-sections\">\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/dining-drinking\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Dining');\">Dining &amp; Drinking</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/city-life\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'City Life');\">Politics &amp; City Life</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/real-estate\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Real Estate');\">Real Estate</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/Chicago-Home\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Home and Garden');\">Home &amp; Garden</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/style-shopping\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Style Shopping');\">Style &amp; Shopping</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link\" href=\"/video\" onclick=\"ga('send', 'event', 'Mobile reveal bar', 'Video');\">Video</a></li>\n",
"<li class=\"reveal-bar-mobile-section\"><a class=\"reveal-bar-mobile-section-link reveal-bar-mobile-section-link-close\" href=\"javascript:void(0);\" onclick=\"jQuery('#reveal-bar-mobile-sections').removeClass('show');\"><i class=\"icon-remove\"></i></a></li>\n",
"</ul>\n",
"<script>\n",
" var mobile_sections_el = jQuery('#reveal-bar-mobile-sections');\n",
" if (document.documentElement.clientWidth <= 400) {\n",
" mobile_sections_el.show();\n",
" }\n",
" mobile_sections_el.css('top',jQuery('#reveal-bar-mobile').outerHeight() - 1)\n",
" jQuery('.reveal-bar-mobile-section-link')\n",
" .height((jQuery(window).height() - jQuery('#reveal-bar-mobile').height() - 50) / 7 - 2)\n",
" .width(mobile_sections_el.width())\n",
" jQuery('#reveal-bar-mobile-sections-button').on('click', function(){\n",
" mobile_sections_el.toggleClass('show');\n",
" })\n",
"</script>\n",
"<div class=\"hidden-phone\" id=\"reveal-bar\">\n",
"<div class=\"container\">\n",
"<a class=\"logo background-logo-svg\" href=\"/\">Chicago magazine</a>\n",
"<div class=\"input-append\">\n",
"<form action=\"http://www.chicagomag.com/search?from=revealbar&amp;\" id=\"reveal-bar-search\" name=\"revealBarSearch\"><input class=\"text clean\" id=\"reveal-bar-input\" name=\"q\" placeholder=\"Search\" type=\"text\"/>\n",
"<button id=\"reveal-bar-button\"><i class=\"icon-search\"></i></button>\n",
"</form>\n",
"</div>\n",
"<div id=\"article-reveal-share\">\n",
"<span class=\"article-reveal-share-intro\">Share this story</span>\n",
"<ul class=\"reveal-share-buttons list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20reveal%20bar%2019495%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event','Sharing', 'Facebook share from reveal bar','1. Old Oak Tap BLT'); return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20share%20reveal%20bar%2019495%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=1.+Old+Oak+Tap+BLT&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" onclick=\"ga('send', 'event','Sharing', 'Tweet story from reveal bar','1. Old Oak Tap BLT'); return tweetPopup('1.+Old+Oak+Tap+BLT','/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/','reveal+bar+19495');\" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"<li class=\"eml\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-in-Chicago-Old-Oak-Tap-BLT%2Findex.php&amp;mode=email','emailThisPage','status=no,scrollbars=yes,resizable=yes,width=420,height=540'); ga('send', \n",
" 'event','Sharing', 'Email story from reveal bar','1. Old Oak Tap BLT'); return false;\" url=\"email this page\"><i class=\"icon-envelope\"></i></a></li>\n",
"</ul>\n",
"</div>\n",
"</div>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"interstitial-newsletter\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style>\n",
" \n",
"\n",
"#cta-backdrop {\n",
" background: #fff;\n",
" opacity: .97;\n",
" display: none;\n",
"}\n",
".modal#cta-modal {\n",
" background: #eee;\n",
" margin-top: 0;\n",
" display: none;\n",
" box-shadow: 3px 3px 12px rgba(0,0,0,0.2);\n",
" overflow: auto;\n",
" border-top: 8px solid #000;\n",
"}\n",
".modal-close {\n",
" background:none;\n",
" color: #ff0000;\n",
" font-weight: 300;\n",
" font-size: 20px;\n",
" font-style: normal;\n",
" opacity: 1;\n",
" text-align: right;\n",
" width: 100%;\n",
"}\n",
".modal-close:hover {\n",
" background: none;\n",
" color: black;\n",
" opacity: 1;\n",
"}\n",
"#cta-modal p.cta-p {\n",
" color: #333 !important;\n",
" font-size: 18px;\n",
" line-height: normal;\n",
" text-align: center;\n",
" margin-bottom: 15px;\n",
"}\n",
".btn-nothanks, .btn-nothanks:hover {\n",
" border: none !important;\n",
" background: none !important;\n",
" color: #666 !important;\n",
"}\n",
"#cta-modal .modal-body {\n",
" padding: 30px;\n",
" height: auto;\n",
" max-height: none;\n",
"}\n",
"#cta-modal label {\n",
" color: #333;\n",
" text-align: center;\n",
" margin-top: 5px;\n",
" margin-bottom: 5px;\n",
"}\n",
"h2.cta-h2 {\n",
" font-size: 45px;\n",
" text-align: center;\n",
" margin-bottom: 10px;\n",
"}\n",
"#cta-modal .btn-large {\n",
" width: 200px;\n",
" -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;\n",
"}\n",
".cta-buttons {\n",
" width: 200px;\n",
" margin: 15px auto 0;\n",
"}\n",
"#cta-form {\n",
" /*text-align: center;*/\n",
" width: 200px;\n",
" margin: 10px auto;\n",
"}\n",
"#cta-form input[type=text] {\n",
" -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;\n",
" height: 40px;\n",
" width: 200px;\n",
"}\n",
".cta-neveragain {\n",
" text-align: right;\n",
" font-size: 10px;\n",
" text-transform: uppercase;\n",
" text-decoration: none;\n",
"}\n",
".cta-neveragain a {\n",
" color: #999;\n",
"}\n",
".cta-neveragain a:hover {\n",
" color: #666;\n",
"}\n",
"#cta-newsletters-outer {\n",
" max-width: 300px;\n",
" margin: 0 auto;\n",
"}\n",
"a.cta-checkbox {\n",
" padding-left: 25px;\n",
" padding-bottom: 10px;\n",
" background-repeat: no-repeat;\n",
" background-position: 0 2px;\n",
" background-image: url('http://media.chicagomag.com/img/checkbox-check.png');\n",
" cursor: pointer;\n",
" color: #000;\n",
" display: block;\n",
" font-size: 16px;\n",
" margin-bottom: 5px;\n",
" transition: none;\n",
"}\n",
"a.cta-checkbox:hover {\n",
" color: #ff0000;\n",
"}\n",
"a.cta-checkbox-yes {\n",
" background-position: 0px -83px;\n",
" color: #666;\n",
"}\n",
"a.cta-checkbox-yes:hover {\n",
" color: #666;\n",
"}\n",
"#cta-modal .form-error {\n",
" margin-bottom: 15px;\n",
"}\n",
"#cta-modal .checkbox input[type=\"checkbox\"] {\n",
" /*top: 7px;*/\n",
" margin-left: initial;\n",
"}\n",
"\n",
"@media screen and (max-width: 420px) {\n",
" .modal#cta-modal {\n",
" border-top: none;\n",
" }\n",
" #cta-modal .modal-body {\n",
" padding: 8px;\n",
" }\n",
" h2.cta-h2 {\n",
" font-size: 30px;\n",
" }\n",
" a.cta-checkbox {\n",
" padding-bottom: 3px;\n",
" }\n",
"}\n",
"\n",
"\n",
"@media screen and (min-width: 420px) {\n",
" .modal#cta-modal {\n",
" /*Logo, 300x60, #eee background*/\n",
" background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABQCAMAAACUNLhJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutQTFRF7+7uIx8gwcHD6urqJiIj7Ovr5eTl5uXl1tbXTExOSEhKiYqN7ezs2dnZcnN1SkpMTU1PKCUmmpud4uLidXZ4t7i6l5ia5OPjjpCS2trb6OjoRERGJCEiQkFDOTg6JyQl4ODhzc7PKSYn5+bmnZ6ghYeJ5eTkNTM1lJaY4eHhKygp1tXWyMnKzMzOmJmbnZ+hl5mbfX+B0NDRvr/A6enp39/f0tLSp6iqm5yeRkZIUlNVQ0JELCkqQUBC5+fn3NzdQ0NF1NTVu7y+0dHSp6mrq62uy8zNSUlLiImL1tfXq6uts7S1xsbHhIaI29vcubq7nJ2fn6CjWlteLSssjY+RUlJUNzY3wsLD19fYlJWY4+PjODc4Pz5AuLm7cHF0yMjJ3t7fPDs8qaqssbK0fX6Azs/Q3d3esLGzkZOVTk5QwsPET09Rr7Gyx8fJV1haU1RWcXJ0q6yu1dXVzM3OrK2v09LT4+PiwMHCVVVXiIqMkZKVr7CyqqutxMTGra6w3d3doKKkVFVWo6SmXV5gMzEyamttb3Bylpea2draysvMY2Nl2NjZpaepRUVHh4iKqKqsLy0vmZqcycrLxsfIrq+xu72+Pj0+oKGjhoeKtre4R0dJlZeZQD9BpKaokpSWdHV3uru9X2Fji4yOycnLZmdpv8DBsrO1WltdVldZYGFk09PUUVFTjY6QnqCiWVpctLW3uru8goSGUFBSfn+Cg4SHOjk7eHp8ZWZpe31/X2BiLiwtSktNpKWnz8/Rdnd6kJGUbG1wgIGDPTw9S0xOjI2PoqSms7S24ODgMTAxpqepbG1vbm9xaGpsxcXGgIKEj5GTk5SXgYOFt7i5NjU2tba4dXd5MC8wg4WHd3h6Xl9ha2xui42PYWJkgIKFvr7AZGVneXp9eHl7bW5xaGlrW1xeVVZYvb7AWFlbw8TFYmJkcnR2XF1fiouNc3V3f4CCoaOlZGRmZ2hqc3R3b3FzNDIzent9vL2/e3x+aWptop1pYQAADf1JREFUeNrsW2dYU8kanhBiVIJKKIkYJUKAoPQioAJSpUhTkCZiBwULKBZEFFCx9y5i77p2V117W1d37W1t23svt/y85wQyM6cfDD73uZe8vzhnvsx8552Zr80AgBlmmGGGGWaYYYYZZphhhhlmmGGGGWaYYYYZZpjx34DLmFVHa9TJx+L1iWtHfyg1vlZIZQZIZcJdyIyyCtbm3J4Whd5Wx55l6JJmJag4e2kcUXg0x2FeUTENGx4kq3VJWWUeCj7ZwKDRa2OKXB9YKZMGWLcxmSu372N2nLk9MPP49O2T/C5VxRk1L/fqboBXdCCT36mqRrgZuHWMNsr2YvvWtvbKY3aLvjl+cO+ui8m6bRFcmvhP7t59cndHwcktSDw0av6nE4szB+66eHJlkj/fLK6KvTTqTm3v4n2fXXRdH2Br2qpKvVt9SoLBKWx/gz/5xfKBYV0NCPtpAf1X0g0HexuQWe1JPidA2b2MyUvwedF+BT7C3HZbS9zYdHnTxdDHb/wKRz2bsE6D99e336tLO1lXl8Lzeu0QS0z00cETRx3fliprn314X0YMqiDJ2mR87LKYQdZtKBtAPvfsanwMpZH1id9glgE0mV5MZaTzGhunu3Er3Dl9ghNLf5Jzt+MYsvLHL3owJZ2+XhL0NlSp1mdK2PEjMVHyTsanjtaM7+pgbLO0MOyz9sbndhSyVp1ewTHCt0x1AuY2Njkv51xVNdUSLoTQhb+dxyVaO7P5XI37lHPkUaAlyFIoh3AN4Dyeqc8oY+MujqXV/SsJNz6iytq6unPL9njSs5lcpQ/m7u1kS5CVPYl7gL6jGfpcGA77jGJVeE8/Hq4kU6iuYr+EF2OzmkOV4w6+vtQtQNbob3gGmMuc2uuo9S82jdev4NPYMgmXnfWBRADr9jSDLDVvVz6mkxWZyTdA2DB6l0F9sG3yCVPhj5x5NbZMxWTjQiWCcD8qmqs5tJ8+uvbd2e2134ytP2d4DDaZLNvtNP/XtfdP288OnNixcfMfd6F3qcSlOzAigSP0dbWumND40wnFYYMMjzYWSDZlOlXUpkt17f6BxVepb5cuFMlVFsX6Of3bNyCFCD8U8qCFj/VDCascaypZgVcoivXzK52sIoK3QFX2tOXJX1tK3qPHuVrKB7oPoDX3otqr/idGFGhJjV20XkcchoYRixHFIvKhFNlOJ2f6t1EAqXb1lq0UM71XK4orj+/wH328luLupf7eEwtNJavEBhvg1L1yyq+HBTyZRw8Nl1Pjvde06PJLvLFLCNXiSaPXT3eKRMYNl613SMAkd57Bw1lXUWT54qZ2JTNByfUwkazcYmyEgZ5MDWbTBg1/n7pH6qMpzVU4989Z/L7teZhD9WyPye6ie92ZXbD1u1sEV4v7Y7OexCVlClkrMX0vR4hQKaoHiz+GmPoKi9DuC3SVgfXyxIPRvBCbxw4uwprpML/DHcyaQJYW84Q/eIhZ60MZ7nI21roR26NFAj2lYIHwHbYqw2S0tvp+L6iYtBZ1ZwXeBVkj0Tq56imGq7i+DNfujTWfRq+HNsPPd0xglViDgpANgvWgVUizg2PEkHWNmXna8ZJ1TPxCaAT0nYv2Gf+ajnzVsHoUMEwWKqyhlMj5BrtIuB3yqpEC3bXBDIoOiCGr381ZFhSMm/YZH1lB78EBQkW552hYtMi/AeOZYNj8uBkOLBJtsvfkHDIWMHDSxAp01xalbKHZosiSONnQoeEjK+5v+MuXohZWBYyJPCJhKPQ7/NZDyH9ZCHVVgvaYklMIud4TAt1ZTEDeAIgjiy/NYCHrJvIf08RwlTLWKL8MBP4Jd5G9sf1L4cXCEhXNPcApFAKF9gt0F9Oe1Yi2IFmHkYnNFkMW3Hp/E50lwuLeC2POj2bXD3cyszvTYE04Xj8oO0HKOWABXH79BVQ7lCdQCjGZrHiUHIg5IXCBmc4iIiUcA5eZU1MZRQvfSPS4ofvAvRsVg/yAAsUg/+IeMQIW0pcK6HZmEEwwPd8NWSdg60UxC6sEis8hH5Pho11TSA7r25IYvP6Vx1DmFxD4Aj7M4Pk0SH+ogG5PnHkqcC1CFix5Sv4hgisZNLdXDbH+apjaDG9Mji/AJNryCF7fG85Qxg6Ef8yeA9DCxL1iyfoCRow9vN41WadFkJUEw774RvJ+oC2OaBgNaNYIkeWICu87uIcM7y2WrOS5cBvOejdkoZi0g/CJqcuP0H011eW3oJKTIWVegMqeaUJkKebDh7vcYwaFiSVLCSU1ieLICqvcZk9B6sbtfGTdR65+mCBZA6AJvd1Utmm7FP7e13AIlclqh1jJAl/Ah0XcExV9zii0SUA7++Owv2RxZLXTNi/dqYQDdBstSBb0Bpbnja9+RekImYUr0CnUV/hZjzMbWRUoK+WeqClQaJ+AdpMXoUpTG1FkNTeR3o3OQYOFuCp/ZBT9oDOczhWUwwDwOaq4YoFmyoZRfiTuPs/DyEJFRE0Jd0AAO9wqoN6HrlB0xTYgxr82lyzM1/8hRFY8W9p3Fr7MHEMpz1vOYbNA0zGyCoYLFyiwep5SqEKDFqHkcx65qf3flqw2yCU5C+Q7neEPbaaU92pC2TOkIbk3s9BK/YGlXJcyESPLDZYtJHkDBOt5c1cLTWYEIv9WKreYbb+3rmfp0cd+puLVJQRl5F37GNEPM92vphIWHvllzRJmHwt641GsFVYIDWcdMwEtrMtTBW0qVksby5282XZ5a7I88yRiYkMik9krFJo4bSTEZmAnYN0FyFqICo+W7JtsK+otVpArEIWV/xfNfgdkgTtYIHZYVKbDiY8p4QWRH/fkJwvMxy4JsFwxkSErKakeI0yW2zyBsxeTyQrApqOHmrOuIl0kTJbzbiJw/QV7UW3BZ7OIsZ8i2aeMtaV9jc2jj5jUddst/GjXm34dLvBojItpZIGL+PfumkY/YJ6dbjigj7IUkSNMIgnAD4XzGqhl7rJrFLJkfvhB+FZKHVqxrRa/eiTu1uSvFHWOO8TlGltUbY+q9zrNl5pIVnk95YrPl2uyjdUlaZBX8Bf1koesZzpsGEw6tQeUV+3qLhj9htto5UQNtUxRRrkV4v7a4kOj6z0yCQ9kz40Td3wfMZF2S+L3K/d16bq6Q5+/b5im5yZuQwBqaPF1p6FWKw/7KBtcJ/2UZ6xVjR8shixDABZxkPru1K6Tel16SM7rP9ZRI3gSI6lnRc5nr/j+VpNe8Zx2E65O7MUQT967TobLbKaRhdtRNktUQKlc8aIPadJnDREhacdy4s4JP6noazRRvIOfNJksoLjCN8AgImmMRBO2z4EOPTabOWR/+afEkwWKhI3haTkQjyy+CkyG6WSBwB0a7gFuRQJQhx7XMPW7h1pDDQb9zSbxZIGQW/ySGtfmXYk/cJm7r7QWIAuASu47ZUMigAc6OBnbmaneQnf65drJ+8WTBY7yVuPyzoNmwtGnP1dnW1qELBBp95RjgGtuIF3CWy53xILLiY1Zia36qmiyQIprN04bsDUONB8J9zj4H0Ehqz8PWZpGsjaxX+0G+ZP6sg6QKVOhY2t3Vh++BKXPNsaryKv92B3o5fksBZfvz7BeWNbMuwneDglp+wfRe7Op1pMnBx5wZpYyLlgE3qFeaI+EF0L70K5lSwPuhjKsrfukVKx4LHnF6pesMRu1HZYfd85oZ0NfKO9XtlloyEb/pAW/Bcv60//FoJtdqhy8NaRePqcndByywsZS49S3W+jx+RVZjb255CyzMsC1jvEfL7LKZ41t8VZlhhrZZtfG52UOzP/20ObvuFy8dHAPJ42lzdP6jgNHBfckPqrygVUTlnEcXya6QomX2NrO3V0x/2Bot75Ed86Dl/b+URknI3xvlVKn82bWUDzWvpxX3OWRM/Fx54Z0/PpE4mJgKsKzV9mvKS2tShp3wAO8E2jLp+2Zkhg7M3+VtbQFurM9MG5PVWJs4e7yXBFjR78pjC2terzTWgbM+L+CYS0ZC3G5Y7RNE2zY7eFyuVwlJ20N/EdDmZtc7tjaOJrSdPU/hsyEp+oMhbMxSd5FdZVeJDmdlSR/G0N85myJyfXcKJ96mPAj2j09QYFu/Ur7VrZjZOd9DbW11Rnkf9mN9yXjA+vNVsH/rMqoIclKTSOjHYvYksPLHjquafDQKkeEgwXq8cB+Q3BplqKVbb4k8uvBYt8tswhvlbhheTiQ3vh5FWmeyVBEPif5SOPymVk3DIz0trUdsTkKBCk9gX2RW6uzVIqSv9RrgTz4ZLwnANm+ys1tQXTRSHRGmuOtNByD+qvzAUGWh1vIMe+2KoKsbRW7B5S1NrKmvFyT0StVXXh/PABROSnKm2DAdX/iPQEZcAxOs75H3rVwHJGjIsmydVMeqZkz28cTvNns0LCxtZEVqw5Kz/jZPvvSeKByKAH2l6SrD3mBwErd4ZoRqojrs8AIJbEPo+NJk0aS5RuwIOejtJ0gX12matPqyPoZRKp1uZGEzfbPqLH30S+0LloCFHuCE11DcqdlBNv7OJQB2fp0FyNZqWBavDoO5BdpW5/NKrVyBBaRIDpjNYipS1OmKZeAqhkj5TLpONcAxco0nTLEYSbYeWi8QioDhb62bg4biT2ZWADyK2ZLW1usrVjuaggt/a0KFidHSWWym9d7SYN3qEP0M2Jl4+I9ZTJpjD7bR71ZqX8IZuZ4qBoKiThMvY0IHXw3F0pbGVtr5xj+qXDxlvLuPuTtl143LoCUmBy9fkkECAgmPeGA0jhdeogy5yGwmKJyKSWrPUvWgix9mr4w0Jz4/A/gPwIMAPwpG5QV/gbUAAAAAElFTkSuQmCC');\n",
" background-position: top center;\n",
" background-repeat: no-repeat;\n",
" background-size: 200px;\n",
" }\n",
" #cta-modal-content {\n",
" padding-top: 40px;\n",
" }\n",
"}\n",
"\n",
"\n",
" \n",
"</style>\n",
"<script>\n",
"var which = '';\n",
"</script>\n",
"<div aria-hidden=\"true\" class=\"modal-backdrop\" id=\"cta-backdrop\" style=\"display: none;\"></div>\n",
"<div class=\"modal\" id=\"cta-modal\" style=\"display: none;\">\n",
"<div class=\"modal-body\">\n",
"<button aria-hidden=\"true\" class=\"close modal-close cta-close\" data-dismiss=\"modal\" id=\"cta-close\" type=\"button\">X</button>\n",
"<div id=\"cta-modal-content\"></div>\n",
"</div><!--/.modal-body-->\n",
"</div><!--/.modal-->\n",
"<style>#print-only-logo {display: none;}</style>\n",
"<img alt=\"\" height=\"129\" id=\"print-only-logo\" src=\"http://media.chicagomag.com/img/chicagomag-logo-black-with-magazine.svg\" width=\"573\"/>\n",
"<!-- Temporary peeking refer — use sparingly, for last-minute promos sitewide. Also removes red \"punch\" from #global-nav-subscribe Subscribe button, so that this call to action is more defined. -->\n",
"<!-- \n",
"<style>\n",
"a#peek {\n",
" box-sizing: border-box;\n",
" display: block;\n",
" background: red;\n",
" height: 0;\n",
"\n",
" color: red;\n",
" text-align: center;\n",
" font-weight: 400;\n",
"}\n",
"\n",
"a#peek:hover {\n",
" color: white !important;\n",
" cursor: pointer;\n",
" cursor: hand;\n",
" background: #dd0000;\n",
"}\n",
"\n",
"a#peek.show {\n",
" height: 48px;\n",
" padding: 10px 5px;\n",
" border-bottom: 8px solid black;\n",
" color: white !important;\n",
"}\n",
"\n",
"#global-nav-subscribe {\n",
" background : none;\n",
" border-radius : 0 !important;\n",
" color : #aaa !important;\n",
" display : initial !important;\n",
" padding : initial !important;\n",
"}\n",
"\n",
"ul.member-nav li a#global-nav-subscribe:hover {\n",
" border-bottom: 1px solid #ff0000;\n",
" background: initial !important;\n",
"}\n",
"\n",
"@media (max-width: 767px) {\n",
" a#peek {\n",
" display: none;\n",
" }\n",
"}\n",
"\n",
"</style>\n",
" -->\n",
"<!-- \n",
"<a id=\"peek\" href=\"/Chicago-Magazine/Promotion/Secret-Supper/Purchase-Tickets/\" onclick=\"ga('send', 'event', 'Global nav', 'Top peeking refer');\">\n",
" Last call for Secret Supper tickets! Click here for more info.\n",
"</a>\n",
"\n",
" -->\n",
"<!-- slide down temporary peeking refer -->\n",
"<!-- \n",
"<script>\n",
"\n",
"jQuery( document ).ready(function() {\n",
" if (document.documentElement.clientWidth > 600) {\n",
" jQuery(\"#peek\").addClass(\"show\");\n",
" } else {\n",
" jQuery(\"#peek\").hide();\n",
" }\n",
"});\n",
"\n",
"</script>\n",
" -->\n",
"<style>\n",
" ul.sub {\n",
" z-index: 99999999 !important;\n",
" }\n",
"</style>\n",
"<header class=\"global\">\n",
"<nav>\n",
"<!--============================================\n",
" = Top part of global nav =\n",
" =============================================-->\n",
"<div class=\"top3\">\n",
"<div class=\"cell one\">\n",
"<a class=\"search-open\" href=\"javascript:;\"><i class=\"icon-search\"></i></a>\n",
"<div class=\"search\">\n",
"<gcse:searchbox-only></gcse:searchbox-only>\n",
"</div>\n",
"</div>\n",
"<div class=\"cell two\">\n",
"<h1 class=\"din land\">\n",
"<a href=\"/dining-drinking\">Dining<span class=\"new-amp\">&amp;</span>Drinking</a>\n",
"</h1>\n",
"<h1 class=\"dg land\">\n",
"<a href=\"/Chicago-Magazine/Dining/Dining-Guide/\">Chicago’s Best Restaurants</a>\n",
"</h1>\n",
"<h1 class=\"art land\">\n",
"<a href=\"/arts-culture\">Arts<span class=\"new-amp\">&amp;</span>Culture</a>\n",
"</h1>\n",
"<h1 class=\"pcl land\">\n",
"<!-- <a href=\"/city-life\">P<span style=\"display: inline-block; margin-right: 0px;\">o</span>litics<i class=\"amp\"><span>&amp;</span></i>City<span style=\"display: inline-block; margin-right: -2px;\">&nbsp; </span>Life<span style=\"display: inline-block; width: 12px;\"></span></a> -->\n",
"<a href=\"/city-life\">Politics<span class=\"new-amp\">&amp;</span>City Life</a>\n",
"</h1>\n",
"<h1 class=\"ren land\">\n",
"<a href=\"/real-estate\">Real Estate</a>\n",
"</h1>\n",
"<h1 class=\"sty land\">\n",
"<a href=\"/style-shopping\">Style<span class=\"new-amp\">&amp;</span>Shopping</a>\n",
"</h1>\n",
"<h1 class=\"hg land\">\n",
"<a href=\"/Chicago-Home\">Home Design</a>\n",
"</h1>\n",
"<h1 class=\"hel land\">\n",
"<a href=\"/Health-Wellness\">Health<span class=\"new-amp\">&amp;</span>Wellness</a>\n",
"</h1>\n",
"<h1 class=\"trv land\">\n",
"<a href=\"/travel\">Travel</a>\n",
"</h1>\n",
"<h1 class=\"vid land\">\n",
"<a href=\"/video\">Video</a>\n",
"</h1>\n",
"<h1 class=\"boc land\">\n",
"<a href=\"http://www.chicagomag.com/Chicago-Magazine/August-2019/Best-of-Chicago/\">Best of Chicago</a>\n",
"</h1>\n",
"<h1 class=\"mkt land\">\n",
"<a href=\"/Chicago-Magazine/Classifieds/\">Marketplace<span class=\"new-amp\">&amp;</span>Classifieds</a>\n",
"</h1>\n",
"<h1>\n",
"<a class=\"logo background-logo-svg\" href=\"/\" onclick=\"ga('send', 'event', 'Global nav', 'Home from main logo');\">Chicago</a>\n",
"</h1>\n",
"</div>\n",
"<div class=\"cell three\">\n",
"<ul class=\"member-nav\">\n",
"<li><a href=\"/subscribe\" id=\"global-nav-subscribe\" onclick=\"ga('send', 'event', 'Global nav', 'Subscribe');\">Subscribe</a>\n",
"<span class=\"red\">/</span>\n",
"<a href=\"/customerservice\" onclick=\"ga('send', 'event', 'Global nav', 'Customer Service');\">Customer Service</a></li>\n",
"<li><a href=\"/newsletters\" onclick=\"ga('send', 'event', 'Global nav', 'Newsletters');\">Newsletters</a> </li>\n",
"</ul>\n",
"</div>\n",
"</div>\n",
"<!--==== End of Top part of global nav ====-->\n",
"<!--=====================================\n",
" = Global nav menus =\n",
" ======================================-->\n",
"<ul id=\"page-nav\">\n",
"<li style=\"white-space: nowrap;\"><a class=\"pcl\" href=\"/city-life\" onclick=\"ga('send', 'event', 'Global nav', 'Politics and city life');\">Politics <span class=\"new-amp\">&amp;</span><br/> City Life</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Chicago-Magazine/September-2018/Best-Public-Schools/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Public Schools');\">Best Public Schools</a>\n",
"<li><a href=\"/Chicago-Magazine/September-2017/Best-Private-Schools/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Private Schools');\">Best Private Schools</a>\n",
"<!--<li><a href=\"/Chicago-Magazine/June-2017/Whos-Got-Next/\" onclick=\"ga('send', 'event', 'Global nav', 'Power 50');\">Emerging Power List</a>-->\n",
"<li><a href=\"/Chicago-Magazine/April-2019/Whos-Got-Next/\" onclick=\"ga('send', 'event', 'Global nav', 'Power 50');\">Emerging Power List</a>\n",
"<!-- <li><a href=\"/topdocs\" onclick=\"ga('send', 'event', 'Global nav', 'Top Docs');\">Top Docs</a></li> -->\n",
"<!-- <li><a href=\"/Chicago-Magazine/January-2017/Top-Cancer-Doctors/\" onclick=\"ga('send', 'event', 'Global nav', 'Top Cancer Docs');\">Top Cancer Docs</a></li> -->\n",
"<li><a href=\"/topic/?archive=crime-law\" onclick=\"ga('send', 'event', 'Global nav', 'Crime and Law');\">Crime &amp; Law</a></li>\n",
"<li><a href=\"/topic/?archive=politics\" onclick=\"ga('send', 'event', 'Global nav', 'Politics');\">Politics</a></li>\n",
"<li><a href=\"/topic/?archive=the-urbanist\" onclick=\"ga('send', 'event', 'Global nav', 'The Urbanist');\">The Urbanist</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Felsenthal-Files/\" onclick=\"ga('send', 'event', 'Global nav', 'Felsenthal');\" style=\"font-size: 13px; letter-spacing: -0.1px;\">Articles by Carol Felsenthal</a></li>\n",
"<!-- <li><a href=\"/topic/?archive=whet-moser\" onclick=\"ga('send', 'event', 'Global nav', 'Whet');\">Articles by Whet Moser</a></li> -->\n",
"</li></li></li></ul>\n",
"</li>\n",
"<!-- Dining & Drinking -->\n",
"<li><a class=\"din\" href=\"/dining-drinking\" onclick=\"ga('send', 'event', 'Global nav', 'Dining');\">Dining <span class=\"new-amp\">&amp;</span><br/> Drinking</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"http://www.chicagomag.com/secretsupper\" onclick=\"ga('send', 'event', 'Global nav', 'Secret Supper');\">Secret Supper</a></li>\n",
"<li><a href=\"/topic/?archive=restaurant-reviews\" onclick=\"ga('send', 'event', 'Global nav', 'Restaurant reviews');\">Restaurant Reviews</a></li>\n",
"<li><a href=\"/hotlist\" onclick=\"ga('send', 'event', 'Global nav', 'Hot list');\">The Hot List</a></li>\n",
"<li><a href=\"/brunch\" onclick=\"ga('send', 'event', 'Global nav', 'Brunch');\">Brunch</a></li>\n",
"<li><a href=\"/topic/?archive=bars-drinking\" onclick=\"ga('send', 'event', 'Global nav', 'Bars and drinking');\">Bars &amp; Drinking</a></li>\n",
"<li><a href=\"/Chicago-Magazine/February-2017/Best-Bars/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Bars');\">Best Bars</a>\n",
"<li><a href=\"/Chicago-Magazine/April-2019/Best-New-Restaurants/\" onclick=\"ga('send', 'event', 'Global nav', 'Best New Restaurants');\">Best New Restaurants</a></li>\n",
"<li><a href=\"/Chicago-Magazine/July-2010/Photos-Best-Pizzas-in-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', 'Best Pizza');\">Best Pizzas</a></li>\n",
"<li><a href=\"/steakhouses\" onclick=\"ga('send', 'event', 'Global nav', 'Best steakhouses');\">Best Steakhouses</a></li>\n",
"<li><a href=\"/Chicago-Magazine/November-2014/Cheap-Eats-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', 'Best cheap eats');\">Best Cheap Eats</a></li>\n",
"<li><a href=\"/takeout\" onclick=\"ga('send', 'event', 'Global nav', 'Best takeout');\">Best Takeout</a></li>\n",
"<li><a href=\"/dining-drinking/July-2018/The-50-Best-Restaurants-in-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', '50 Best Restaurants');\">Chicago’s Best Restaurants</a>\n",
"<!-- <li><a href=\"/video/Inside-Chicagos-Best-Restaurants/\" onclick=\"ga('send', 'event', 'Global nav', 'Dining video series');\">Video: Inside Chicago’s Best Restaurants</a> -->\n",
"<!-- <li><a href=\"/video/Inside-Chicagos-Best-Bars/\" onclick=\"ga('send', 'event', 'Global nav', 'Dining video series bars');\">Video: Inside Chicago’s Best Bars</a> -->\n",
"<!-- <li><a href=\"http://www.chicagomag.com/video/In-the-Kitchen/\" onclick=\"ga('send', 'event', 'Global nav', 'Dining video series In Season');\">Video: In the Kitchen</a> -->\n",
"<li class=\"nav-sub-search clearfix\"><div class=\"margin-bottom-5\">Search Chicago’s Best Restaurants:</div>\n",
"<form action=\"/Chicago-Magazine/Dining/Dining-Guide/index.php?\" method=\"get\">\n",
"<input name=\"search\" type=\"text\"/>\n",
"<button onclick=\"ga('send', 'event', 'Global nav', 'Search Dining Guide');\">Go</button>\n",
"</form>\n",
"</li>\n",
"</li></li></ul>\n",
"</li>\n",
"<!-- Arts & Culture -->\n",
"<li><a class=\"art\" href=\"/arts-culture\" onclick=\"ga('send', 'event', 'Global nav', 'Arts');\">Arts <span class=\"new-amp\">&amp;</span><br> Culture</br></a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/go\" onclick=\"ga('send', 'event', 'Global nav', 'Go Listings');\">The Go Listings</a></li>\n",
"<li><a href=\"/topic/?archive=architecture\" onclick=\"ga('send', 'event', 'Global nav', 'Architecture');\">Architecture</a></li>\n",
"<li><a href=\"/topic/?archive=art\" onclick=\"ga('send', 'event', 'Global nav', 'Art');\">Art</a></li>\n",
"<li><a href=\"/topic/?archive=books\" onclick=\"ga('send', 'event', 'Global nav', 'Books');\">Books &amp; Readings</a></li>\n",
"<li><a href=\"/topic/?archive=comedy\" onclick=\"ga('send', 'event', 'Global nav', 'Comedy');\">Comedy</a></li>\n",
"<li><a href=\"/topic/?archive=dance\" onclick=\"ga('send', 'event', 'Global nav', 'Dance');\">Dance</a></li>\n",
"<li><a href=\"/topic/?archive=lollapalooza\" onclick=\"ga('send', 'event', 'Global nav', 'Lollapalooza');\">Lollapalooza</a></li>\n",
"<li><a href=\"/topic/?archive=pitchfork\" onclick=\"ga('send', 'event', 'Global nav', 'Pitchfork');\">Pitchfork </a></li>\n",
"<li><a href=\"/topic/?archive=museums\" onclick=\"ga('send', 'event', 'Global nav', 'Museums');\">Museums</a></li>\n",
"<li><a href=\"/topic/?archive=music\" onclick=\"ga('send', 'event', 'Global nav', 'Music');\">Music</a></li>\n",
"<!-- <li><a href=\"/summer-music-festivals/\" onclick=\"ga('send', 'event', 'Global nav', 'Summer music fests');\">Summer Music Festivals</a></li> -->\n",
"<li><a href=\"/topic/?archive=theater\" onclick=\"ga('send', 'event', 'Global nav', 'Theater');\">Theater</a></li>\n",
"<!-- <li><a href=\"/video/Inside-Chicagos-Best-Theater/\" onclick=\"ga('send', 'event', 'Global nav', 'Video Theater');\">Video: Inside Chicago’s Best Theater</a> -->\n",
"<!-- <li><a href=\"/video/In-the-Studio/\" onclick=\"ga('send', 'event', 'Global nav', 'Video Inside the Studio');\">Video: Inside the Studio</a></li> -->\n",
"</ul>\n",
"</li>\n",
"<!-- Real Estate -->\n",
"<li><a class=\"ren\" href=\"/real-estate\" onclick=\"ga('send', 'event', 'Global nav', 'Real Estate + Neighborhoods');\">Home <span class=\"new-amp\">&amp;</span><br/> Real Estate</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Chicago-Magazine/June-July-2019/Where-To-Buy-Now/\" onclick=\"ga('send', 'event', 'Global nav', 'Best neighborhoods');\">Where to Buy Now</a>\n",
"<li><a href=\"/Field-Guides\" onclick=\"ga('send', 'event', 'Global nav', 'Field Guides');\">Neighborhood Field Guides</a></li>\n",
"<li><a href=\"/real-estate\" onclick=\"ga('send', 'event', 'Global nav', 'Real Estate News');\">Real Estate News</a></li>\n",
"<li><a href=\"/Chicago-Home\" onclick=\"ga('send', 'event', 'Global nav', 'Home + Garden');\">Home Design</a></li>\n",
"</li></ul>\n",
"</li>\n",
"<!-- Style & Shopping -->\n",
"<li><a class=\"sty\" href=\"/style-shopping\" onclick=\"ga('send', 'event', 'Global nav', 'Style + Shopping');\">Style <span class=\"new-amp\">&amp;</span> Shopping</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/topic/?archive=fashion\" onclick=\"ga('send', 'event', 'Global nav', 'Fashion');\">Fashion</a></li>\n",
"<li><a href=\"/topic/?archive=sales-shopping\" onclick=\"ga('send', 'event', 'Global nav', 'Sales + Shopping News (under S+S)');\">Sales &amp; Shopping News</a></li>\n",
"<li><a href=\"/topic/?archive=tastemakers\" onclick=\"ga('send', 'event', 'Global nav', 'Tastemakers');\">Taste Makers</a></li>\n",
"</ul>\n",
"</li>\n",
"<!-- Health & Wellness -->\n",
"<li><a class=\"hg\" href=\"/Health-Wellness\" onclick=\"ga('send', 'event', 'Global nav', 'Health + Wellness');\">Health <span class=\"new-amp\">&amp;</span><br/> Wellness</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Chicago-Magazine/Promotion/Fit-Society/\" onclick=\"ga('send', 'event', 'Global nav', 'Fit Society');\">Fit Society</a></li>\n",
"<li><a href=\"/Health-Wellness\" onclick=\"ga('send', 'event', 'Global nav', 'Health + Wellness');\">Health News</a></li>\n",
"<li><a href=\"/topdocs\" onclick=\"ga('send', 'event', 'Global nav', 'Top Docs');\">Top Docs</a></li>\n",
"</ul>\n",
"</li>\n",
"<!-- Video -->\n",
"<li id=\"red-hack-item\">\n",
"<a href=\"https://www.youtube.com/user/chicagomag\" onclick=\"ga('send', 'event', 'Global nav', 'Video');\" target='_blank\"'>\n",
"  <br/>\n",
"<i id=\"red-hack\" style=\"\n",
" background-image: url(http://getbootstrap.com/2.3.2/assets/img/glyphicons-halflings.png); \n",
" display: inline-block;\n",
" filter: brightness(0) invert(1);\n",
" width: 18px;\n",
" height: 10px;\n",
" background-position: -335px -99px;\n",
" \"></i>Video</a>\n",
"</li>\n",
"<style>\n",
" i#red-hack.hover {\n",
" filter: sepia() saturate(10000%) hue-rotate(10deg) !important;\n",
" }\n",
" </style>\n",
"<script>\n",
" jQuery('#red-hack-item').hover(\n",
" function() {\n",
" jQuery(this).children(\"a\").children(\"i#red-hack\").addClass( \"hover\" );\n",
" }, function() {\n",
" jQuery(this).children(\"a\").children(\"i#red-hack\").removeClass( \"hover\" );\n",
" }\n",
" );\n",
" </script>\n",
"<!-- OLD VIDEO -->\n",
"<!-- <li><a href=\"/video\" class=\"tra\" onclick=\"ga('send', 'event', 'Global nav', 'Video');\">&nbsp;<br>Video</a>\n",
" <ul class=\"sub\">\n",
" <li><a href=\"http://www.chicagomag.com/video/Chicagos-Great-Neighborhoods/\" onclick=\"ga('send', 'event', 'Global nav', 'Chicago’s Great Neighborhoods');\">Chicago’s Great Neighborhoods</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/Inside-Chicagos-Best-Bars/\" onclick=\"ga('send', 'event', 'Global nav', 'Inside Chicago’s Best Bars');\">Inside Chicago’s Best Bars</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/Inside-Chicagos-Best-Restaurants/\" onclick=\"ga('send', 'event', 'Global nav', 'Inside Chicago’s Best Restaurants');\">Inside Chicago’s Best Restaurants</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/Inside-Chicagos-Best-Theater/\" onclick=\"ga('send', 'event', 'Global nav', 'Inside Chicago’s Best Theater');\">Inside Chicago’s Best Theater</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/In-the-Studio\" onclick=\"ga('send', 'event', 'Global nav', 'Inside the Studio');\">Inside the Studio</a></li>\n",
" <li><a href=\"http://www.chicagomag.com/video/In-the-Kitchen/\" onclick=\"ga('send', 'event', 'Global nav', 'In Season');\">In the Kitchen</a></li>\n",
" </ul>\n",
" </li> -->\n",
"<!-- Visitors Guide -->\n",
"<li><a class=\"tra\" href=\"/Visitors-Guide/\" onclick=\"ga('send', 'event', 'Global nav', 'Visitors Guide');\">Visitor's <br/>Guide</a>\n",
"<ul class=\"sub\">\n",
"<li><a href=\"/Visitors-Guide/\" onclick=\"ga('send', 'event', 'Global nav', 'Visitors Guide');\">Visitor’s Guide</a></li>\n",
"<li><a href=\"/travel\" onclick=\"ga('send', 'event', 'Global nav', 'Travel News');\">Travel News &amp; Features</a></li>\n",
"</ul>\n",
"</li>\n",
"<!-- Best of Chicago -->\n",
"<li style=\"flex-grow: 0;\">\n",
"<a class=\"boc\" href=\"/Chicago-Magazine/August-2019/Best-of-Chicago/\" onclick=\"ga('send', 'event', 'Global nav', 'Best of Chicago');\">Best of<br> Chicago</br></a>\n",
"</li>\n",
"</ul>\n",
"</nav>\n",
"<!--==== End of Global nav menus ====-->\n",
"</header>\n",
"<!-- Begin Content Wrap -->\n",
"<a class=\"edit_from_site\" content_id=\"leaderboard-1\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (max-width:735px) {\n",
" #div-gpt-ad-leaderboard-1 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"ad ban\" id=\"div-gpt-ad-leaderboard-1\">\n",
"<script>\n",
"if (document.documentElement.clientWidth > 735) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-leaderboard-1');\n",
"});\n",
"}\n",
" </script>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"mobile-leaderboard-1\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (min-width:736px) {\n",
" #div-gpt-ad-mobile-leaderboard-1 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"mobile-ban-wrapper mobile-ban-fixed\">\n",
"<div id=\"div-gpt-ad-mobile-leaderboard-1\" style=\"height: 50px; width:320px;margin: 0 auto;\">\n",
"<script>\n",
"if (document.documentElement.clientWidth < 736) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-mobile-leaderboard-1');\n",
"})\n",
"}\n",
" </script>\n",
"</div>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"mobile-leaderboard-2\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (min-width:736px) {\n",
" #div-gpt-ad-mobile-leaderboard-2 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"mobile-ban-wrapper\" id=\"mobile-leaderboard-2\">\n",
"<div id=\"div-gpt-ad-mobile-leaderboard-2\" style=\"width: 320px; height: 50px; margin: 0 auto;\">\n",
"<script>\n",
"if (document.documentElement.clientWidth < 736) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-mobile-leaderboard-2');\n",
"})\n",
"}\n",
" </script>\n",
"</div>\n",
"</div>\n",
"<div id=\"content-wrap\">\n",
"<!--- special treatment for stacked galleries in regular articles, removes first couple leaderboard ads in between -->\n",
"<style>\n",
"div.content.post div.super-gallery-stacked-photo-outer ~ div.ad.ban {\n",
" display: none;\n",
"}\n",
".fb-like.fb-like-top {\n",
"\tdisplay: none !important;\n",
"}\n",
"</style>\n",
"<!--- Begin Page -->\n",
"<div class=\"long\" id=\"page\">\n",
"<article class=\"container long\" id=\"article-19495\">\n",
"<a class=\"edit_from_site\" content_id=\"789\" href=\"#\" media_id=\"97\">Edit Module</a><div class=\"story-label story-label-link\">\n",
"<a href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago\">2012 Best Sandwiches</a>\n",
"</div><a class=\"edit_from_site\" content_id=\"550\" href=\"#\" media_id=\"97\">Edit Module</a>\n",
"<div id=\"article-header-image-container\">\n",
"<header class=\"clearfix\">\n",
"<!--- special toppers for repeat features -->\n",
"<!--- special treatment for Urbanist -->\n",
"<h1 class=\"headline\">1. Old Oak Tap BLT</h1>\n",
"<h2 class=\"deck\">“Truly inspired.”</h2>\n",
"<div class=\"article-meta clearfix\" id=\"article-meta\">\n",
"<p class=\"timestamp\">Published Oct. 9, 2012</p>\n",
"<section class=\"clearfix\" id=\"share-mini\">\n",
"<ul class=\"story-share-buttons story-share-buttons-mini list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/?utm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20above%20story%2019495%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event', 'Sharing', 'Facebook share from top of article','1. Old Oak Tap BLT');\n",
" return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20above%20story%2019495%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=1.+Old+Oak+Tap+BLT&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" onclick=\"ga('send', 'event', 'Sharing', 'Tweet story from top of article','1. Old Oak Tap BLT');\n",
" return tweetPopup('1.+Old+Oak+Tap+BLT','/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/','19495');\n",
" \" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"<li class=\"eml\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageID=19495&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-in-Chicago-Old-Oak-Tap-BLT%2Findex.php&amp;mode=email','emailThisPage','status=no,scrollbars=yes,resizable=yes,width=420,height=540'); ga('send', 'event', 'Sharing', 'Email story (top of story)','1. Old Oak Tap BLT'); return false;\" url=\"email this page\"><i class=\"icon-envelope\"></i></a></li>\n",
"<li class=\"prnt\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageid=19495&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-in-Chicago-Old-Oak-Tap-BLT%2Findex.php&amp;mode=print','printThisPage','status=no,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,width=570'); ga('send', 'event', 'Sharing', 'Print story (top of story)' ,'1. Old Oak Tap BLT'); return false;\" target=\"_blank\" url=\"print this page\"><i class=\"icon-print\"></i></a></li>\n",
"<li class=\"cmmnt\"><a href=\"javascript:void(0);\" onclick=\"jumpto('#comment',150);\"><i class=\"icon-comment\"></i></a></li>\n",
"<li class=\"comment-count\"><a data-disqus-identifier=\"19495\" href=\"javascript:void(0);\" id=\"comment-count\" onclick=\"jumpto('#comment',150);\"></a></li>\n",
"</ul>\n",
"</section> </div> </header>\n",
"<section class=\"caption main\">\n",
"<figure>\n",
"<div class=\"position-relative image-launch-wrapper\">\n",
"<picture>\n",
"<source media=\"(max-width: 320px)\" srcset=\"/images/cache/cache_6/cache_5/cache_a/01-Old-Oak-Trap-BLT-500-737a6a56.jpeg?ver=1483658044&amp;aspectratio=1.4634146341463, /images/cache/cache_9/cache_1/cache_0/01-Old-Oak-Trap-BLT-500-87972019.jpeg?ver=1483658044&amp;aspectratio=1.4619883040936 2x\"/>\n",
"<source media=\"(max-width: 470px)\" srcset=\"/images/cache/cache_a/cache_9/cache_c/01-Old-Oak-Trap-BLT-500-64a12c9a.jpeg?ver=1483658044&amp;aspectratio=1.4754098360656, /images/cache/cache_b/cache_c/cache_0/01-Old-Oak-Trap-BLT-500-d13040cb.jpeg?ver=1483658044&amp;aspectratio=1.4749262536873 2x\"/>\n",
"<source srcset=\"/images/cache/cache_2/cache_b/cache_6/01-Old-Oak-Trap-BLT-500-604ed6b2.jpeg?ver=1482330137&amp;aspectratio=1.4749262536873, /images/cache/cache_4/cache_0/cache_a/01-Old-Oak-Trap-BLT-500-dcc14a04.jpeg?ver=1483658044&amp;aspectratio=1.4749262536873 2x\"/>\n",
"<img alt=\"\" height=\"420\" id=\"article-lead-image\" src=\"/images/cache/cache_2/cache_b/cache_6/01-Old-Oak-Trap-BLT-500-604ed6b2.jpeg?ver=1482330137&amp;aspectratio=1.4749262536873\" width=\"620\">\n",
"</img></picture>\n",
"<a class=\"launch bottom-right\" href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/index.php?mode=popup&amp;cp=1&amp;view=slideshow&amp;play=0\" id=\"gallery-link\" style=\"display: none;\">Launch gallery</a>\n",
"</div>\n",
"<figcaption> <span class=\"photo-credit\">Photo: Anna Knott; Food stylist: Lisa Kuehl</span>\n",
"</figcaption>\n",
"</figure>\n",
"</section>\n",
"</div><!-- /#article-header-image-container -->\n",
"<div class=\"content-and-sidebar\">\n",
"<div class=\"content post\">\n",
"<div class=\"fb-like fb-like-top\" data-href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" data-layout=\"box_count\" data-send=\"false\" data-share=\"true\" data-show-faces=\"false\" data-width=\"50\"></div>\n",
"<p>\n",
"\tThe B is applewood smoked—nice and snappy. The L is arugula—fresh and peppery. The T is a fried green slice—jacketed in cornmeal and greaseless. Slathered with pimiento cheese, the grilled ciabatta somehow stays crisp, providing three distinct layers of crunch. Truly inspired.</p>\n",
"<p class=\"addy\">\n",
"<em>$10. 2109 W. Chicago Ave., 773-772-0406, <a href=\"http://www.theoldoaktap.com/\">theoldoaktap.com</a></em></p>\n",
"<aside class=\"story-nav-aside\">\n",
"<a class=\"story-nav\" href=\"http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Phoebes-Bakery-The-Gatsby/\" id=\"story-nav-left\">\n",
"<span class=\"previous\">Previous</span>\n",
"<span class=\"story-nav-head\">50. The Gatsby</span>\n",
" Phoebe’s Bakery\n",
" </a>\n",
"<a class=\"story-nav\" href=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Au-Cheval-Fried-Bologna/\" id=\"story-nav-right\">\n",
"<span class=\"next\">Next</span>\n",
"<span class=\"story-nav-head\">2. Fried Bologna</span>\n",
" Au Cheval\n",
" </a>\n",
"</aside>\n",
"<footer>This article appears in the <a href=\"/Chicago-Magazine/November-2012/\">November 2012</a> issue of <em> Chicago</em> magazine. <a href=\"http://www.chicagomag.com/subscribe\" onclick=\"ga('send', 'event','Refer clicks', 'Subscribe, article footer');\">Subscribe to <em>Chicago</em> magazine</a>.</footer>\n",
"<div class=\"clearfix\"></div>\n",
"<script>\n",
" var newsletterChoice = \"Dish\";\n",
"</script>\n",
"<div class=\"margin-top-10 margin-bottom-40\" id=\"footer-newsletter-subscribe\">\n",
"<div class=\"lazyload\" data-url=\"/lazyloads/furniture/dish-subscribe-footer.html?2\" id=\"lazy-newsletter-footer\"> </div>\n",
"</div>\n",
"<script>\n",
" jQuery(function(){\n",
" // If the user has already subscribed to this newsletter, hide the footer form.\n",
" // In its stead, reveal the related articles and popular stories. (Super articles only.)\n",
" if (getCookie('subscribe-Dish') == 'true') {\n",
" jQuery('#footer-newsletter-subscribe').hide();\n",
" // jQuery('.show-if-no-newsletter-cta').show();\n",
" }\n",
" // else {\n",
" // jQuery('.show-if-no-newsletter-cta').hide();\n",
" // }\n",
" })\n",
"\n",
"\n",
"\n",
"</script>\n",
"<section class=\"clearfix\" id=\"share\">\n",
"<h3>Share</h3>\n",
"<ul class=\"story-share-buttons list-no-bullets clearfix\">\n",
"<li class=\"fb\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com//Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20below%20story%2019495%20May%2027%202020%2019:14\" onclick=\"ga('send', 'event', 'Sharing', 'Facebook share from article','1. Old Oak Tap BLT');\n",
" return socialPopup('https://www.facebook.com/sharer/sharer.php?u=http://www.chicagomag.com//Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/%3Futm_source=facebook.com%26utm_medium=referral%26utm_campaign=Facebook%20below%20story%2019495%20May%2027%202020%2019:14');\" target=\"_blank\"><i class=\"icon-facebook\"></i></a>\n",
"</li>\n",
"<li class=\"tw\"><a href=\"https://twitter.com/share?text=1.+Old+Oak+Tap+BLT&amp;url=http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\" onclick=\"ga('send', 'event', 'Sharing', 'Tweet story from article','1. Old Oak Tap BLT');\n",
" return tweetPopup('1.+Old+Oak+Tap+BLT','/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/','19495');\n",
" \" target=\"_blank\"><i class=\"icon-twitter\"></i></a></li>\n",
"<li class=\"eml\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageID=19495&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-in-Chicago-Old-Oak-Tap-BLT%2Findex.php&amp;mode=email','emailThisPage','status=no,scrollbars=yes,resizable=yes,width=420,height=540'); ga('send', 'event', 'Sharing', 'Email story','1. Old Oak Tap BLT'); return false;\" url=\"email this page\"><i class=\"icon-envelope\"></i></a></li>\n",
"<li class=\"prnt\"><a href=\"#\" onclick=\"window.open('/core/pagetools.php?pageid=19495&amp;url=%2FChicago-Magazine%2FNovember-2012%2FBest-Sandwiches-in-Chicago-Old-Oak-Tap-BLT%2Findex.php&amp;mode=print','printThisPage','status=no,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,width=570'); ga('send', 'event', 'Sharing', 'Print story' ,'1. Old Oak Tap BLT'); return false;\" target=\"_blank\" url=\"print this page\"><i class=\"icon-print\"></i></a></li>\n",
"<li class=\"cmmnt\"><a href=\"javascript:void(0);\" onclick=\"jumpto('#comment',150);\"><i class=\"icon-comment\"></i></a></li>\n",
"</ul>\n",
"</section>\n",
"<a class=\"edit_from_site\" content_id=\"ad-600-100\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (max-width:599px) {\n",
" #ad-600-100-outer {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"ad ban-600\" id=\"ad-600-100-outer\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-600-100\"></div>\n",
"<script>\n",
"\n",
"if (document.documentElement.clientWidth > 600) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-600-100');\n",
"});\n",
"}\n",
" </script>\n",
"</div>\n",
"<section id=\"related-articles\">\n",
"<a class=\"title\" href=\"/dining-drinking\">Other Dining &amp; Drinking stories</a>\n",
"<div class=\"related-row clearfix\">\n",
"<div class=\"related related-1\">\n",
"<a class=\"related-thumb\" href=\"/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 1, '/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/');\" style=\"background-image: url('/images/cache/cache_8/cache_0/cache_0/C20200607-F-I-Got-a-Guy-Greg-Wade-ff206008.jpeg?ver=1590074990&amp;aspectratio=1.5'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 1, '/Chicago-Magazine/June-July-2020/I-Got-a-Guy-Greg-Wades-Flour-Miller/');\">Searching High and Low for Flour? Try the Publican’s Miller</a></h2>\n",
"<p class=\"time\">6 days ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"<div class=\"related related-2 related-nativo\">\n",
"<a class=\"related-thumb\" href=\"/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 2, '/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/');\" style=\"background-image: url('/images/cache/cache_f/cache_1/cache_3/EggintheHoleHamSandwich-5459731f.jpeg?ver=1589810459&amp;aspectratio=1.4791666666667'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 2, '/dining-drinking/May-2020/Blackbirds-Chef-Wants-You-to-Sandwich-in-Place/');\">Blackbird’s Chef Wants You to “Sandwich in Place”</a></h2>\n",
"<p class=\"time\">1 week ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"</div><!-- /.related-row -->\n",
"<div class=\"related-row clearfix\">\n",
"<div class=\"related related-3\">\n",
"<a class=\"related-thumb\" href=\"/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 3, '/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/');\" style=\"background-image: url('/images/cache/cache_e/cache_d/cache_7/N3MRCSZ35RFYFAI53T3VGY7G64-d6b357de.jpeg?ver=1589393500&amp;aspectratio=1.5'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 3, '/dining-drinking/May-2020/Kevin-Boehm-Boka-Group-Reopening/');\">Kevin Boehm: PPP Repayment Terms a “Death Sentence”</a></h2>\n",
"<p class=\"time\">2 weeks ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"<div class=\"related related-4\">\n",
"<a class=\"related-thumb\" href=\"/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (photo), slot ' + 4, '/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/');\" style=\"background-image: url('/images/cache/cache_c/cache_9/cache_b/thumbnail_042819-056-60088b9c.jpeg?ver=1589219589&amp;aspectratio=1.5'); background-size: cover;\"> </a>\n",
"<div class=\"content\">\n",
"<h2><a href=\"/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/\" onclick=\"ga('send', 'event', 'Refer clicks', 'Related (head), slot ' + 4, '/dining-drinking/May-2020/Comp-Tab-Chicago-Coronavirus/');\">Chicago’s By-Hospitality, For-Hospitality Relief Fund</a></h2>\n",
"<p class=\"time\">2 weeks ago</p>\n",
"</div><!-- /.content -->\n",
"</div><!-- /.related -->\n",
"</div><!-- /.related-row -->\n",
"</section>\n",
"<!-- End Related Articles -->\n",
"<div id=\"comment\" style=\"clear: both; height: 1px;\"></div>\n",
"<a class=\"edit_from_site\" content_id=\"comments-disqus\" href=\"#\" media_id=\"83\">Edit Module</a><div class=\"comments-block\" id=\"commentFormContainer\">\n",
"<h5 class=\"add-comment\">Submit your comment</h5>\n",
"<p class=\"comments-disclaimer\">Comments are moderated. We review them in an effort to remove foul language, commercial messages, abuse, and irrelevancies.</p>\n",
"<div id=\"disqus_thread\" style=\"max-width: 600px;\"></div>\n",
"<script type=\"text/javascript\">\n",
"</script>\n",
"<noscript>Enable JavaScript to view the <a href=\"http://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n",
"</div>\n",
"</div>\n",
"<!-- Begin Sidebar -->\n",
"<aside class=\"article long clearfix\">\n",
"<div class=\"tablet-sidebar-left\">\n",
"<a class=\"edit_from_site\" content_id=\"widget-marketplace-sponsor\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style>\n",
"\n",
".btn-widget-small {\n",
" margin-bottom: 5px;}\n",
"\n",
".amp {\n",
"color: white;\n",
"webkit-transition: none .2s ease; \n",
"}\n",
"\n",
"ul.menu {\n",
"background: black;\n",
" position:absolute;\n",
" /*height: 0px;*/\n",
" visibility: hidden;\n",
" margin-top: 0px;\n",
" background-color: black;\n",
" width: 300px;\n",
" padding: 0px 0px 10px;\n",
"z-index: 9999999;\n",
"}\n",
"\n",
"ul.menu li a {\n",
" font-size: .75em;\n",
" font-style: italic;\n",
" text-align:center;\n",
"}\n",
"#btn-sponsored-features {\n",
"position: relative;\n",
"}\n",
"\n",
"#btn-sponsored-features:hover .menu {\n",
" /*position: relative;*/\n",
" visibility: visible;\n",
"\n",
" /*height: 80%;*/\n",
"\n",
"}\n",
"\n",
"ul.menu a {\n",
"-webkit-transition: none;-moz-transition:none;transition:none;\n",
"}\n",
"#marketing-widget {\n",
"margin-bottom: 20px;\n",
"}\n",
"</style>\n",
"<div id=\"marketing-widget\">\n",
"<div class=\"btn-widget-small btn-widget-small-reverse\">\n",
"<a href=\"/marketplace\" onclick=\"ga('send', 'event','M&amp;C widget', 'Marketplace');\" style=\"display: inline-block; margin-right: 2px;\">Marketplace</a>\n",
"</div>\n",
"<div class=\"btn-widget-small btn-widget-small-reverse\">\n",
"<a href=\"/Chicago-Magazine/Promotion/Events-and-Party-Pix/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Events and Party Pix');\" style=\"display: inline-block; margin-right: 2px;\">Events <span class=\"new-amp\">&amp;</span> Party Pix</a>\n",
"</div>\n",
"<div class=\"btn-widget-small btn-widget-small-reverse\" id=\"btn-sponsored-features\"><span>Resource Guide</span>\n",
"<ul class=\"menu\">\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Amelia-Island/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Amelia Island');\">Amelia Island</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Chicago-Profiles/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Chicago Profiles');\">Chicago Profiles</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Dental-Profiles/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Dental Profiles');\">Dental Profiles</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Experience-Chicago/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Experience Chicago');\">Experience Chicago</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Family-Law/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Family Law Profiles');\">Family Law Profiles</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Guide-to-Summer-Camps/\" onclick=\"ga('send', 'event','M&amp;C widget', '2019 Summer Camps');\">Guide to Summer Camps</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Give-Chicago\" onclick=\"ga('send', 'event','M&amp;C widget', '2018 Give Chicago');\">Give Chicago</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/2019-Go-West/\" onclick=\"ga('send', 'event','M&amp;C widget', '2018 Go West');\">Go West</a></li>\n",
"<!-- <li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Make-it-Lincoln-Park-2018/\" onclick=\"ga('send', 'event','M&C widget', 'Make It Lincoln Park');\">Make it Lincoln Park</a></li> -->\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Prime-of-Your-Life-2018/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Prime of Your Life');\">Prime of Your Life</a></li>\n",
"<li><a href=\"http://www.chicagomag.com/Chicago-Magazine/Promotion/Professional-Profiles/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Professional Profiles');\">Professional Profiles</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Promotion/School-Open-House-Guide/\" onclick=\"ga('send', 'event','M&amp;C widget', 'School Open House Guide');\">School Open House Guide</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Promotion/Top-Producing-Agents/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Top Producing Agents');\">Top Producing Agents</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Promotion/Women-to-Watch/\" onclick=\"ga('send', 'event','M&amp;C widget', 'Women to Watch');\">Women to Watch</a></li>\n",
"</ul>\n",
"</div>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"cube-1\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<div class=\"ad sq\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-cube-1\" style=\"height: 250px; width: 300px;\"></div>\n",
"<script type=\"text/javascript\">\n",
"googletag.cmd.push(function() {\n",
"\t\tgoogletag.display('div-gpt-ad-cube-1');\n",
"});\n",
"\t</script>\n",
"</div>\n",
"<a class=\"edit_from_site\" content_id=\"cube-3\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<div class=\"ad sq\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-cube-3\" style=\"width: 300px; height: 250px; margin: 0 auto;\">\n",
"<script>\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-cube-3');\n",
"});\n",
" </script>\n",
"</div>\n",
"</div>\n",
"</div>\n",
"<div class=\"tablet-sidebar-right\">\n",
"<form action=\"\" method=\"post\" name=\"newsletter\" onsubmit=\"validateNewsletter(); return false;\">\n",
"<section class=\"newsletters widget\" id=\"category-specific-newsletter\">\n",
"<h2 class=\"title red-border\" id=\"newsletterTitle\">Get Our Newsletters</h2>\n",
"<div class=\"newsletter-reveal clearfix\" style=\"display: block;\">\n",
"<p class=\"newsletter-description\"></p>\n",
"<input class=\"clean white\" name=\"email\" placeholder=\"Your email address\" type=\"text\"/>\n",
"<div class=\"form-error\" id=\"error-email\">\n",
" Please enter your email address\n",
" </div>\n",
"<label class=\"checkbox\" for=\"over21\"> <input checked=\"\" id=\"over21\" name=\"over21\" type=\"checkbox\" value=\"yes\"/>Are you 21 or older?</label>\n",
"<input name=\"source\" type=\"hidden\" value=\"/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/\"/>\n",
"<input id=\"newsletterChoice\" name=\"newsletter\" type=\"hidden\" value=\"\"/>\n",
"<br style=\"clear:both;\"/>\n",
"<button type=\"submit\">Subscribe</button>\n",
"</div>\n",
"</section>\n",
"</form>\n",
"<script>\n",
" var newsletterChoice = \"Dish\";\n",
" \n",
" \n",
"\n",
" var cookieValue = getCookie('subscribe-'+newsletterChoice.replace(' ','-'));\n",
" if (cookieValue == 'true') {\n",
" jQuery('#category-specific-newsletter').hide();\n",
" }\n",
"\n",
" else {\n",
" var description = '';\n",
" switch (newsletterChoice) {\n",
" case 'Home & Real Estate':\n",
" description = \"<span class='leadin'>Fridays:</span> Get the latest real estate news, keep an eye on the city’s most beautiful and unique listings, and learn about the best home & design events locally.\";\n",
" break;\n",
" case 'The 312':\n",
" description = \"<span class='leadin'>Tuesdays:</span> Get up to speed on the week’s most important stories and must-reads.\";\n",
" break;\n",
" case 'Chicago Guide':\n",
" description = \"<span class='leadin'>Wednesdays:</span> <em>Chicago</em>’s culture critics bring you a weekly list of the top five events worth your time and money.\";\n",
" break;\n",
" case 'Go Travel':\n",
" description = \"<span class='leadin'>Monthly:</span> Be the first to know about exclusive travel discounts and offers to help you plan your next big adventure, courtesy of our sponsors.\";\n",
" break;\n",
" case 'Dish':\n",
" description = \"<span class='leadin'>Wednesdays:</span> Want the latest news from the Chicagoland dining scene served up fresh in your email inbox? Sign up for the weekly newsletter and get inside access to the city’s most plugged-in food and dining coverage. \";\n",
" break;\n",
" case 'Sales Check':\n",
" description = \"<span class='leadin'>Thursdays:</span> Hear about the great shopping experiences in the Chicago area, plus the latest news about hot store openings, sales, trends, and local retail news. Shop-a-holic? We know just how you feel. \";\n",
" break;\n",
" case 'VIP Newsletter':\n",
" description = \"<span class='leadin'>Mondays, Wednesdays, and Fridays: </span><em>Chicago</em> magazine hosts various events throughout the year. Sign up and join the party!\";\n",
" break;\n",
" case 'Special Offers':\n",
" description = 'Receive special offers and discounts from <em>Chicago</em> magazine’s selected partners.';\n",
" break;\n",
" case 'Health & Wellness':\n",
" description = \"<span class='leadin'>Third Mondays: </span>The top local stories in health care innovation, nutrition, exercise, wellness, and more—plus, local classes and workshops worth attending. Our editors will bring you the latest on how to live life, well.\";\n",
" break;\n",
" case 'Select all':\n",
" description = 'Subscribe to <em>Chicago Guide</em>, <em>Chicago Travel</em>, <em>Dish</em>, <em>Health & Wellness</em>, <em>Sales Check</em>, <em>Home & Real Estate</em>, <em>VIP Newsletter</em>, and <em>Special Offers</em>.'\n",
" }\n",
"\n",
"\n",
" jQuery('.newsletter-description').html(description);\n",
" jQuery('.newsletter-reveal').slideDown();\n",
" jQuery('#newsletterChoice').val(newsletterChoice);\n",
" jQuery('#newsletterTitle').html('Subscribe to ' + newsletterChoice);\n",
" }\n",
"\n",
"</script>\n",
"<div class=\"lazyload\" data-url=\"/lazyloads/most-popular/\" id=\"lazy-popular\"></div>\n",
"<div id=\"fixie-side-position-finder\">\n",
"<div class=\"clearfix\" id=\"fixie-side\">\n",
"<a class=\"edit_from_site\" content_id=\"cube-2\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<div class=\"ad sq\">\n",
"<h2>Advertisement</h2>\n",
"<div id=\"div-gpt-ad-cube-2\" style=\"width: 300px; height: 250px; margin: 0 auto;\">\n",
"<script>\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-cube-2');\n",
"});\n",
" </script>\n",
"</div>\n",
"</div>\n",
"<script>\n",
" // Make the fixed slot refresh every 2 minutes (on desktops; ad is not fixed elsewhere)\n",
" setInterval(function(){\n",
" if (jQuery('#fixie-side').css('position') == 'fixed') {\n",
" googletag.pubads().refresh([cube2]);\n",
" }\n",
" }, 120000);\n",
" </script>\n",
"<a class=\"edit_from_site\" content_id=\"widget-current-issue\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<section class=\"subscribe widget\">\n",
"<a class=\"button\" href=\"javascript:void(0);\"><span class=\"title\">Subscribe</span><span class=\"plus\">+</span><span class=\"minus\">-</span></a>\n",
"<div class=\"issue\">\n",
"<a href=\"/Chicago-Magazine/May-2020/\" onclick=\"ga('send', 'event', 'Current issue widget', 'Current issue');\"><img alt=\"Current issue of Chicago magazine\" height=\"145\" src=\"/images/cache/cache_4/cache_1/cache_e/CMAG0520-4c4a6e14.jpeg?ver=1588621703&amp;aspectratio=0.75862068965517\" width=\"110\"/></a>\n",
"<a class=\"btn\" href=\"/subscribe\" onclick=\"ga('send', 'event', 'Current issue widget', 'Subscribe (red button)');\">Subscribe</a>\n",
"</div>\n",
"<ul>\n",
"<li>\n",
"<a href=\"/subscribe\" onclick=\"ga('send', 'event', 'Current issue widget', 'Subscribe');\">\n",
"<span class=\"lead\"><span class=\"red\">Subscribe</span> to the</span>\n",
"<span class=\"title\">Print &amp; Tablet Edition</span>\n",
"</a>\n",
"</li>\n",
"<li>\n",
"<a href=\"http://www.chicagomag.com/digitaledition\" onclick=\"ga('send', 'event', 'Current issue widget', 'Digital edition');\">\n",
"<span class=\"lead\"><span class=\"red\">Subscribe</span> to the</span>\n",
"<span class=\"title\">Digital Edition</span>\n",
"</a>\n",
"</li>\n",
"<li>\n",
"<a class=\"ipad\" href=\"/ipad\" onclick=\"ga('send', 'event', 'Current issue widget', 'iPad');\">\n",
"<span class=\"lead\"><span class=\"red\">Download</span> our tablet app for</span>\n",
"<span class=\"title\">iPad</span>\n",
"</a>\n",
"<a class=\"android\" href=\"/android\" onclick=\"ga('send', 'event', 'Current issue widget', 'Android');\">\n",
"<span class=\"title\">Android</span>\n",
"</a>\n",
"</li>\n",
"<li>\n",
"<a class=\"single\" href=\"/single-issues\" onclick=\"ga('send', 'event', 'Current issue widget', 'Single Issues');\">\n",
"<span class=\"lead\"><span class=\"red\">Purchase</span> copies of</span>\n",
"<span class=\"title\">Single Issues</span>\n",
"</a>\n",
"<a class=\"gift\" href=\"/gifts\" onclick=\"ga('send', 'event', 'Current issue widget', 'Gift');\">Give a <span class=\"red\">gift</span> subscription</a>\n",
"</li>\n",
"</ul>\n",
"</section>\n",
"</div>\n",
"</div>\n",
"</div>\n",
"</aside>\n",
"<!-- End Sidebar -->\n",
"</div> <!-- End .content-and-sidebar -->\n",
"</article>\n",
"<!-- End Main Article Container -->\n",
"</div><!--- End Page -->\n",
"<a class=\"edit_from_site\" content_id=\"leaderboard-2\" href=\"#\" media_id=\"83\">Edit Module</a>\n",
"<style type=\"text/css\">\n",
" @media (max-width:735px) {\n",
" #div-gpt-ad-leaderboard-2 {\n",
" display:none !important;\n",
" }\n",
" }\n",
"</style>\n",
"<div class=\"ad ban\" id=\"div-gpt-ad-leaderboard-2\">\n",
"<script type=\"text/javascript\">\n",
"if (document.documentElement.clientWidth > 735) {\n",
"googletag.cmd.push(function() {\n",
" googletag.display('div-gpt-ad-leaderboard-2');\n",
"});\n",
"}\n",
" </script>\n",
"</div>\n",
"</div><!-- End Content Wrap -->\n",
"<div id=\"div-out-of-page\">\n",
"<script>\n",
" googletag.cmd.push(function() {\n",
" googletag.display('div-out-of-page');\n",
" });\n",
" </script>\n",
"</div>\n",
"<script>(function(d, s, id) {\n",
" var js, fjs = d.getElementsByTagName(s)[0];\n",
" if (d.getElementById(id)) return;\n",
" js = d.createElement(s); js.id = id;\n",
" js.src = \"//connect.facebook.net/en_US/all.js#xfbml=1&appId=432224116825361\";\n",
" fjs.parentNode.insertBefore(js, fjs);\n",
"}(document, 'script', 'facebook-jssdk'));</script>\n",
"<!-- LSC tracking pixel -->\n",
"<script>\n",
" document.write('<script id=\"tbw_pixel\" type=\"text/javascript\" src=\"//d26x5ounzdjojj.cloudfront.net/tbw/tbw_analytics_v1.0.js?' + (new Date()).getHours() + '\" onload=\"tbw_parse(this);\" tbw_site_id=\"Ldd6b4994ab6844a0\" tbw_segment=\"Retargeting\" defer><\\/script>');\n",
"</script>\n",
"<!-- fix for gallery height bug -->\n",
"<script>\n",
"jQuery( document ).ready(function() {\n",
" jQuery('.photoset-grid-basic .photoset-row').css( \"height\", \"initial\" );\n",
"});\n",
"</script>\n",
"<!-- force removal of bottom nav in gallery view -->\n",
"<style>\n",
"body.gallery.no-nav aside.story-nav-aside {\n",
" display: none !important;\n",
"}\n",
"</style>\n",
"<footer class=\"page-footer\">\n",
"<nav>\n",
"<a class=\"logo background-logo-svg\" href=\"/\" onclick=\"ga('send', 'event', 'Global footer', 'Logo to home');\">Chicago magazine</a>\n",
"<select class=\"clean wide nav\" id=\"page-nav-mobile\" onchange=\"location = this.options[this.selectedIndex].value;\">\n",
"<option value=\"/Chicago-Magazine/Advertise\">Advertise</option>\n",
"<option value=\"/Chicago-Magazine/Contact-Us\">Contact Us</option>\n",
"<option value=\"/Chicago-Magazine/Classifieds/\">Marketplace</option>\n",
"<option value=\"http://www.tronc.com/privacy-policy/\">Privacy &amp; Terms (Updated)</option>\n",
"<option value=\"/Chicago-Magazine/archive-index-test\">Archive</option>\n",
"<option value=\"/customerservice\">Customer Service</option>\n",
"<option value=\"/newsletters\">Newsletters</option>\n",
"<option value=\"/subscribe\">Subscribe</option>\n",
"</select>\n",
"<section class=\"links\">\n",
"<ul>\n",
"<li><a href=\"/Chicago-Magazine/Advertise\" onclick=\"ga('send', 'event','Global footer', 'Advertise');\">Advertise</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Contact-Us\" onclick=\"ga('send', 'event','Global footer', 'Contact us');\">Contact Us</a></li>\n",
"<li><a href=\"/Chicago-Magazine/Classifieds/\" onclick=\"ga('send', 'event','Global footer', 'Marketplace');\">Marketplace</a></li>\n",
"<li><a href=\"http://www.tronc.com/privacy-policy/\" onclick=\"ga('send', 'event','Global footer', 'Privacy');\">Privacy (Updated)</a></li>\n",
"<li><a href=\"http://www.tronc.com/central-terms-of-service/\" onclick=\"ga('send', 'event','Global footer', 'Terms');\">Terms</a></li>\n",
"</ul>\n",
"<ul>\n",
"<li><a href=\"/Chicago-Magazine/archive-index-test\" onclick=\"ga('send', 'event','Global footer', 'Archive');\">Archive</a></li>\n",
"<li><a href=\"/customerservice\" onclick=\"ga('send', 'event','Global footer', 'Customer service');\">Customer Service</a></li>\n",
"<li><a href=\"/newsletters\" onclick=\"ga('send', 'event','Global footer', 'Newsletters');\">Newsletters</a></li>\n",
"<li><a href=\"/subscribe\" onclick=\"ga('send', 'event','Global footer', 'Subscribe');\">Subscribe</a></li>\n",
"</ul>\n",
"</section>\n",
"<div class=\"credits\">\n",
"<p class=\"copyright\">©<span id=\"copyright-year\"></span> <em>Chicago</em> magazine / A Chicago Tribune Media Group website</p>\n",
"</div>\n",
"</nav>\n",
"</footer>\n",
"<!--[if lt IE 9]>\n",
"<script type=\"text/javascript\" language\"Javascript\">\n",
"console.log('Mutha ucking IE8');\n",
"jQuery('html').addClass('old-ie');\n",
"</script>\n",
"<![endif]-->\n",
"<script>\n",
"document.getElementById('copyright-year').innerHTML = new Date().getFullYear()\n",
"</script>\n",
"<!-- Chartbeat -->\n",
"<script type=\"text/javascript\">\n",
"var _sf_async_config={uid:3096,domain:\"chicagomag.com\"}; // ,useCanonical: true\n",
"\n",
" _sf_async_config.sections = \"Dining & Drinking\";\n",
"\n",
"\n",
"(function(){\n",
" function loadChartbeat() {\n",
" window._sf_endpt=(new Date()).getTime();\n",
" var e = document.createElement('script');\n",
" e.setAttribute('language', 'javascript');\n",
" e.setAttribute('type', 'text/javascript');\n",
" e.setAttribute('src',\n",
" ((\"https:\" == document.location.protocol) ? \"https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/\" : \"http://static.chartbeat.com/\") +\n",
" \"js/chartbeat.js\");\n",
" document.body.appendChild(e);\n",
" }\n",
" var oldonload = window.onload;\n",
" window.onload = (typeof window.onload != 'function') ?\n",
" loadChartbeat : function() { oldonload(); loadChartbeat(); };\n",
"})();\n",
"</script>\n",
"<!-- Google Custom Search Engine -->\n",
"<script type=\"text/javascript\">\n",
" (function() {\n",
" var cx = '010330565828956611806:7mfjr5payok'; //PROD\n",
" // var cx = '012184964769571027538:4alkqopmlde'; // DEV\n",
" var gcse = document.createElement('script');\n",
" gcse.type = 'text/javascript';\n",
" gcse.async = true;\n",
" gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +\n",
" '//www.google.com/cse/cse.js?cx=' + cx;\n",
" var s = document.getElementsByTagName('script')[0];\n",
" s.parentNode.insertBefore(gcse, s);\n",
" })();\n",
"</script>\n",
"<script src=\"https://www.sc.pages05.net/lp/static/js/iMAWebCookie.js?5d52baad-1411358527b-d7c8ec57ae636c7258d3eb0ef0e531f2&amp;h=www.pages05.net\" type=\"text/javascript\"></script>\n",
"<!-- Disqus -->\n",
"<!-- For Citi sponsorship (remove this conditional after Nov 2018) -->\n",
"<!-- -->\n",
"<script>\n",
" var disqus_shortname = 'chicagomag';\n",
" var disqus_identifier = '19495';\n",
" var disqus_title = '1. Old Oak Tap BLT';\n",
" var disqus_url = 'http://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-in-Chicago-Old-Oak-Tap-BLT/';\n",
"\n",
" /* * * DON'T EDIT BELOW THIS LINE * * */\n",
" (function() {\n",
" var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n",
" dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';\n",
" (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n",
" })();\n",
"\n",
" (function () {\n",
" var s = document.createElement('script'); s.async = true;\n",
" s.type = 'text/javascript';\n",
" s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';\n",
" (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);\n",
" }());\n",
"</script>\n",
"<!-- -->\n",
"<!-- Clean up the lame Rivista pagination -->\n",
"<script type=\"text/javascript\">\n",
" var pb = jQuery('.page-break');\n",
" if (pb.length) {\n",
" var pagebreak = pb.html();\n",
" // Remove it from Page 1\n",
" if (pagebreak.substring(0,10) == \"(page 1 of\") {\n",
" pb.hide();\n",
" }\n",
" else if (pagebreak.substring(0,13) == \"<em>Page 1 of\") {\n",
" pb.hide();\n",
" }\n",
" else {\n",
" pagebreak = pagebreak.replace(\"(page\",\"<em>Page\");\n",
" pagebreak = pagebreak.replace(\")\",\"</em>\");\n",
" pb.html(pagebreak);\n",
" pb.css('display','inline-block');\n",
" }\n",
" }\n",
"</script>\n",
"<!--[if lt IE 9]>\n",
"<script type=\"text/javascript\" language=\"JavaScript\" src=\"/core/media/themes/Respond/js/respond.js?ver=1473876729\"></script>\n",
"<![endif]-->\n",
"<script language=\"JavaScript\" src=\"/core/media/js/base.js?ver=1473876728\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/core/media/themes/Respond/js/bootstrap.min.js?ver=1473876729\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"//maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/interstitial.js?ver=1524154906\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/newsletter-subscribe.js?ver=1524850607\" type=\"text/javascript\"></script>\n",
"<script language=\"JavaScript\" src=\"/theme_overrides/Respond/js/RivistaGoogleDFP.js?ver=1447178886\" type=\"text/javascript\"></script>\n",
"<!-- godengo-monitor --></body>\n",
"</html>"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"html = urlopen(df['URL'][0])\n",
"soup_tmp = BeautifulSoup(html, 'html.parser')\n",
"soup_tmp"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- p 태그에 addy class를 찾아보니, 내가 원하는 정보가 모두 있다!"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:35.940786Z",
"start_time": "2020-05-28T00:14:35.909544Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<p class=\"addy\">\n",
"<em>$10. 2109 W. Chicago Ave., 773-772-0406, <a href=\"http://www.theoldoaktap.com/\">theoldoaktap.com</a></em></p>\n"
]
}
],
"source": [
"print(soup_tmp.find('p', 'addy')) # p 태그에 addy class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 위의 정보를 텍스트로 가지고 와서, 빈 칸을 기준으로 나눠주겠다"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:35.972030Z",
"start_time": "2020-05-28T00:14:35.940786Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n$10. 2109 W. Chicago Ave., 773-772-0406, theoldoaktap.com'"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"price_tmp = soup_tmp.find('p', 'addy').get_text()\n",
"price_tmp"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:36.003274Z",
"start_time": "2020-05-28T00:14:35.972030Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['$10.', '2109', 'W.', 'Chicago', 'Ave.,', '773-772-0406,', 'theoldoaktap.com']"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"price_tmp.split()"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:36.034515Z",
"start_time": "2020-05-28T00:14:36.003274Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'$10'"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 1. 가격\n",
"price_tmp.split()[0][:-1] # 맨 뒤에 \".\"을 제거해주기 위해 [:-1]을 추가로 넣어줌"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:14:36.065758Z",
"start_time": "2020-05-28T00:14:36.034515Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'2109 W. Chicago Ave.,'"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 2. 주소 (join 명령을 사용해서 주소 정보 합쳐주기)\n",
"\" \".join(price_tmp.split()[1:-2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**이제 연습 과정을 마치고, 반복문을 사용하여 50개의 페이지에 대해서 위에서 했던 작업들을 수행해주자!!**\n",
"\n",
"<참고>\n",
"- 50개의 페이지에 대해서 반복문을 수행하면 꽤 시간이 걸린다\n",
"- 때문에 ```tqdm``` 모듈을 사용해서, 반복문이 얼마나 수행되었는지에 대한 \"상태 진행바\"를 만들어줘보겠다!"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.001364Z",
"start_time": "2020-05-28T00:14:36.065758Z"
}
},
"outputs": [],
"source": [
"from tqdm import tqdm_notebook # \"진행 상태바\"를 만들기 위한 모듈!\n",
"\n",
"price = []\n",
"address = []\n",
"\n",
"for n in df.index[:50]:\n",
" html = urlopen(df['URL'][n])\n",
" soup_tmp = BeautifulSoup(html, 'lxml')\n",
" \n",
" gettings = soup_tmp.find('p', 'addy').get_text()\n",
" \n",
" price.append(gettings.split()[0][:-1]) # 가격\n",
" address.append(\" \".join(gettings.split()[1:-2])) # 주소"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.011053Z",
"start_time": "2020-05-28T00:18:29.003070Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['$10',\n",
" '$9',\n",
" '$9.50',\n",
" '$9.40',\n",
" '$10',\n",
" '$7.25',\n",
" '$16',\n",
" '$10',\n",
" '$9',\n",
" '$17',\n",
" '$11',\n",
" '$5.49',\n",
" '$14',\n",
" '$10',\n",
" '$13',\n",
" '$4.50',\n",
" '$11.95',\n",
" '$11.50',\n",
" '$6.25',\n",
" '$15',\n",
" '$5',\n",
" '$6',\n",
" '$8',\n",
" '$5.99',\n",
" '$7.52',\n",
" '$11.95',\n",
" '$7.50',\n",
" '$12.95',\n",
" '$7',\n",
" '$21',\n",
" '$9.79',\n",
" '$9.75',\n",
" '$13',\n",
" '$7.95',\n",
" '$9',\n",
" '$9',\n",
" '$8',\n",
" '$8',\n",
" '$7',\n",
" '$6',\n",
" '$7.25',\n",
" '$11',\n",
" '$6',\n",
" '$9',\n",
" '$5.49',\n",
" '$8',\n",
" '$6.50',\n",
" '$7.50',\n",
" '$8.75',\n",
" '$6.85']"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"price"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**<주의>**\n",
"- 주소 출력 결과를 보면, \"Multiple\"이라고 되어 있는 부분들이 있다\n",
"- 마지막에 50개의 맛집 리스트를 시각화 할 때, 이 부분들은 제외시키고 시각화 해 줄 것이다!! "
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.026010Z",
"start_time": "2020-05-28T00:18:29.015039Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['2109 W. Chicago Ave.,',\n",
" '800 W. Randolph St.,',\n",
" '445 N. Clark St.,',\n",
" '914 Noyes St., Evanston,',\n",
" '825 W. Fulton Mkt.,',\n",
" '100 E. Walton',\n",
" '1639 S. Wabash Ave.,',\n",
" '2211 W. North Ave.,',\n",
" '3619 W. North Ave.,',\n",
" '3267 S. Halsted St.,',\n",
" '2537 N. Kedzie Blvd.,',\n",
" 'Multiple',\n",
" '3124 N. Broadway,',\n",
" '3455 N. Southport Ave.,',\n",
" '2657 N. Kedzie Ave.,',\n",
" '1120 W. Grand Ave.,',\n",
" '1141 S. Jefferson St.,',\n",
" '333 E. Benton Pl.,',\n",
" '1411 N. Wells St.,',\n",
" '1747 N. Damen Ave.,',\n",
" '3209 W. Irving Park',\n",
" 'Multiple',\n",
" '5347 N. Clark St.,',\n",
" '2954 W. Irving Park Rd.,',\n",
" 'Multiple',\n",
" '191 Skokie Valley Rd., Highland Park,',\n",
" 'Multiple',\n",
" '1818 W. Wilson Ave.,',\n",
" '2517 W. Division St.,',\n",
" '218 W. Kinzie',\n",
" 'Multiple',\n",
" '1547 N. Wells St.,',\n",
" '415 N. Milwaukee Ave.,',\n",
" '1840 N. Damen Ave.,',\n",
" '1220 W. Webster Ave.,',\n",
" '5357 N. Ashland Ave.,',\n",
" '1834 W. Montrose Ave.,',\n",
" '615 N. State St.,',\n",
" 'Multiple',\n",
" '241 N. York Rd., Elmhurst,',\n",
" '1323 E. 57th St.,',\n",
" '655 Forest Ave., Lake Forest,',\n",
" 'Hotel Lincoln, 1816 N. Clark St.,',\n",
" '100 S. Marion St., Oak Park,',\n",
" '26 E. Congress Pkwy.,',\n",
" '2018 W. Chicago Ave.,',\n",
" '25 E. Delaware Pl.,',\n",
" '416 N. York St., Elmhurst,',\n",
" '65 E. Washington St.,',\n",
" '3351 N. Broadway,']"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"address"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.036003Z",
"start_time": "2020-05-28T00:18:29.029002Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(50, 50, 50)"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(price), len(address), len(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**이제 df(데이터 프레임)에 위에서 만들어진 'price'와 'address'를 변수로 추가해주겠다!**"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.069891Z",
"start_time": "2020-05-28T00:18:29.038976Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Cafe</th>\n",
" <th>Menu</th>\n",
" <th>Price</th>\n",
" <th>Address</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Rank</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Old Oak Tap</td>\n",
" <td>BLT</td>\n",
" <td>$10</td>\n",
" <td>2109 W. Chicago Ave.,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Au Cheval</td>\n",
" <td>Fried Bologna</td>\n",
" <td>$9</td>\n",
" <td>800 W. Randolph St.,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Xoco</td>\n",
" <td>Woodland Mushroom</td>\n",
" <td>$9.50</td>\n",
" <td>445 N. Clark St.,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Al’s Deli</td>\n",
" <td>Roast Beef</td>\n",
" <td>$9.40</td>\n",
" <td>914 Noyes St., Evanston,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Publican Quality Meats</td>\n",
" <td>PB&amp;L</td>\n",
" <td>$10</td>\n",
" <td>825 W. Fulton Mkt.,</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Cafe Menu Price \\\n",
"Rank \n",
"1 Old Oak Tap BLT $10 \n",
"2 Au Cheval Fried Bologna $9 \n",
"3 Xoco Woodland Mushroom $9.50 \n",
"4 Al’s Deli Roast Beef $9.40 \n",
"5 Publican Quality Meats PB&L $10 \n",
"\n",
" Address \n",
"Rank \n",
"1 2109 W. Chicago Ave., \n",
"2 800 W. Randolph St., \n",
"3 445 N. Clark St., \n",
"4 914 Noyes St., Evanston, \n",
"5 825 W. Fulton Mkt., "
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Price'] = price\n",
"df['Address'] = address\n",
"\n",
"df = df.loc[:, ['Rank', 'Cafe', 'Menu', 'Price', 'Address']] # 칼럼들의 순서 정렬\n",
"df.set_index('Rank', inplace = True) # Rank 변수를 index로 지정\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**위의 과정들을 거쳐 만들어진 df 데이터를, csv 파일로 내보내는 코드는 따로 실행하지 않겠다**\n",
"\n",
"**(이미 data 폴더에 해당 데이터가 존재하기 때문)**"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.075878Z",
"start_time": "2020-05-28T00:18:29.071886Z"
}
},
"outputs": [],
"source": [
"# df.to_csv('../data/03. best_sandwiches_list_chicago2.csv', sep = ',', encoding = 'UTF-8')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**<여기까지 수행해 준 작업 요약>**\n",
"- 시카고 매거진의 샌드위치 맛집을 소개하는 페이지를 기본으로 두고, 그 페이지에서 링크된 50개의 페이지까지 접속해서 원하는 정보를 가져왔다\n",
"- 그리고 가져온 정보들을 원하는 형태로 가공해주는 작업까지 처리해주었다"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 맛집 위치를 지도에 표시하기"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.645249Z",
"start_time": "2020-05-28T00:18:29.078868Z"
}
},
"outputs": [],
"source": [
"import folium\n",
"import googlemaps\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.671215Z",
"start_time": "2020-05-28T00:18:29.648242Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Cafe</th>\n",
" <th>Menu</th>\n",
" <th>Price</th>\n",
" <th>Address</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Rank</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Old Oak Tap</td>\n",
" <td>BLT</td>\n",
" <td>$10</td>\n",
" <td>2109 W. Chicago Ave.,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Au Cheval</td>\n",
" <td>Fried Bologna</td>\n",
" <td>$9</td>\n",
" <td>800 W. Randolph St.,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Xoco</td>\n",
" <td>Woodland Mushroom</td>\n",
" <td>$9.50</td>\n",
" <td>445 N. Clark St.,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Al’s Deli</td>\n",
" <td>Roast Beef</td>\n",
" <td>$9.40</td>\n",
" <td>914 Noyes St., Evanston,</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Publican Quality Meats</td>\n",
" <td>PB&amp;L</td>\n",
" <td>$10</td>\n",
" <td>825 W. Fulton Mkt.,</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Cafe Menu Price \\\n",
"Rank \n",
"1 Old Oak Tap BLT $10 \n",
"2 Au Cheval Fried Bologna $9 \n",
"3 Xoco Woodland Mushroom $9.50 \n",
"4 Al’s Deli Roast Beef $9.40 \n",
"5 Publican Quality Meats PB&L $10 \n",
"\n",
" Address \n",
"Rank \n",
"1 2109 W. Chicago Ave., \n",
"2 800 W. Randolph St., \n",
"3 445 N. Clark St., \n",
"4 914 Noyes St., Evanston, \n",
"5 825 W. Fulton Mkt., "
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# index_col = 0 으로 설정해서 Rank 변수를 index로 지정\n",
"df = pd.read_csv('../data/03. best_sandwiches_list_chicago2.csv', index_col = 0)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:29.679160Z",
"start_time": "2020-05-28T00:18:29.673175Z"
}
},
"outputs": [],
"source": [
"gmaps_key = \"*************************************\" # 2장에서 사용한 API 키 값을 입력\n",
"gmaps = googlemaps.Client(key = gmaps_key)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**50개의 맛집에 대해서 위도 및 경도 정보를 받아오기**\n",
"- 아래의 코드는 2장에서 자세하게 설명했으므로 여기서는 설명 생략!"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:37.801371Z",
"start_time": "2020-05-28T00:18:29.682152Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Playdata\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n",
"Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`\n",
" after removing the cwd from sys.path.\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "285624ce19f44f6da0d42c2588e96dbe",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=50.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"lat = []\n",
"lng = []\n",
"\n",
"for n in tqdm_notebook(df.index):\n",
" # 앞서 언급했듯이 주소가 \"Multiple\"로 되어있는 것들은 제외시킨다\n",
" if df['Address'][n] != 'Multiple':\n",
" target_name = df['Address'][n] + ',' + 'Chicago'\n",
" gmaps_output = gmaps.geocode(target_name)\n",
" location_output = gmaps_output[0].get('geometry')\n",
" lat.append(location_output['location']['lat'])\n",
" lng.append(location_output['location']['lng'])\n",
" \n",
" # 주소가 \"Multiple\"로 되어있는 것들은 NaN 값을 넣어준다\n",
" else:\n",
" lat.append(np.nan)\n",
" lng.append(np.nan)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:37.811308Z",
"start_time": "2020-05-28T00:18:37.804328Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(50, 50)"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(lat), len(lng)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 위에서 만들어준 lat, lng 리스트를 'lat', 'lng'라는 이름의 변수로 df(데이터 프레임)에 추가해주기\n",
" - 이제 df(데이터 프레임)에 위도 및 경도 정보까지 넣어주었으므로, ```folium``` 을 사용하여 시각화 할 준비 완료!!"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:37.835248Z",
"start_time": "2020-05-28T00:18:37.814301Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Cafe</th>\n",
" <th>Menu</th>\n",
" <th>Price</th>\n",
" <th>Address</th>\n",
" <th>lat</th>\n",
" <th>lng</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Rank</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Old Oak Tap</td>\n",
" <td>BLT</td>\n",
" <td>$10</td>\n",
" <td>2109 W. Chicago Ave.,</td>\n",
" <td>41.895605</td>\n",
" <td>-87.679961</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Au Cheval</td>\n",
" <td>Fried Bologna</td>\n",
" <td>$9</td>\n",
" <td>800 W. Randolph St.,</td>\n",
" <td>41.884658</td>\n",
" <td>-87.647667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Xoco</td>\n",
" <td>Woodland Mushroom</td>\n",
" <td>$9.50</td>\n",
" <td>445 N. Clark St.,</td>\n",
" <td>41.890523</td>\n",
" <td>-87.630783</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Al’s Deli</td>\n",
" <td>Roast Beef</td>\n",
" <td>$9.40</td>\n",
" <td>914 Noyes St., Evanston,</td>\n",
" <td>42.058322</td>\n",
" <td>-87.683748</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Publican Quality Meats</td>\n",
" <td>PB&amp;L</td>\n",
" <td>$10</td>\n",
" <td>825 W. Fulton Mkt.,</td>\n",
" <td>41.886600</td>\n",
" <td>-87.648451</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Cafe Menu Price \\\n",
"Rank \n",
"1 Old Oak Tap BLT $10 \n",
"2 Au Cheval Fried Bologna $9 \n",
"3 Xoco Woodland Mushroom $9.50 \n",
"4 Al’s Deli Roast Beef $9.40 \n",
"5 Publican Quality Meats PB&L $10 \n",
"\n",
" Address lat lng \n",
"Rank \n",
"1 2109 W. Chicago Ave., 41.895605 -87.679961 \n",
"2 800 W. Randolph St., 41.884658 -87.647667 \n",
"3 445 N. Clark St., 41.890523 -87.630783 \n",
"4 914 Noyes St., Evanston, 42.058322 -87.683748 \n",
"5 825 W. Fulton Mkt., 41.886600 -87.648451 "
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['lat'] = lat\n",
"df['lng'] = lng\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**```folium```을 사용하여 지도에 50개의 맛집들을 시각화!!**\n",
"- 50개 맛집의 위도 및 경도를 지도에 표기"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"ExecuteTime": {
"end_time": "2020-05-28T00:18:38.005788Z",
"start_time": "2020-05-28T00:18:37.840233Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTAiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFs0MS45MjQyNDkyMTM2MzYzNjUsIC04Ny42ODQzNzQ0NzA0NTQ1M10sCiAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICAgICAgICAgICAgICB6b29tOiAxMSwKICAgICAgICAgICAgICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBwcmVmZXJDYW52YXM6IGZhbHNlLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgCgogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyX2VjZTc4MGQ3MmQxMzQzNWVhODc0ZmJkOTU3MGE2OWQwID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAiaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmciLAogICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGlvbiI6ICJEYXRhIGJ5IFx1MDAyNmNvcHk7IFx1MDAzY2EgaHJlZj1cImh0dHA6Ly9vcGVuc3RyZWV0bWFwLm9yZ1wiXHUwMDNlT3BlblN0cmVldE1hcFx1MDAzYy9hXHUwMDNlLCB1bmRlciBcdTAwM2NhIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiXHUwMDNlT0RiTFx1MDAzYy9hXHUwMDNlLiIsICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwgIm1heE5hdGl2ZVpvb20iOiAxOCwgIm1heFpvb20iOiAxOCwgIm1pblpvb20iOiAwLCAibm9XcmFwIjogZmFsc2UsICJvcGFjaXR5IjogMSwgInN1YmRvbWFpbnMiOiAiYWJjIiwgInRtcyI6IGZhbHNlfQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZTJmZTNmN2EzNTY0YTYyOTAyYWJlZmM5NjM0OTczZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg5NTYwNDksIC04Ny42Nzk5NjE0OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTE5MWNjNDgwNzNlNGE0MGEyYzlmZGIzYzdlNjkwNzIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdiODYwMTY0Njk4ODQxY2I4MzY2MzM1YzFmYWNhNTU5ID0gJChgPGRpdiBpZD0iaHRtbF83Yjg2MDE2NDY5ODg0MWNiODM2NjMzNWMxZmFjYTU1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2xkIE9hayBUYXA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTE5MWNjNDgwNzNlNGE0MGEyYzlmZGIzYzdlNjkwNzIuc2V0Q29udGVudChodG1sXzdiODYwMTY0Njk4ODQxY2I4MzY2MzM1YzFmYWNhNTU5KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2VlMmZlM2Y3YTM1NjRhNjI5MDJhYmVmYzk2MzQ5NzNmLmJpbmRQb3B1cChwb3B1cF85MTkxY2M0ODA3M2U0YTQwYTJjOWZkYjNjN2U2OTA3MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmVmZGFlN2E4YWI0YzViOTcxN2VkYmEzMTBkZjIxYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg4NDY1ODIsIC04Ny42NDc2NjY4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85ODU1OGFmZDNhY2M0ZmViOThkOGEyNjVkYzQwZmU5OCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2IyZWU0MzZiMmNiNDE0MzhmYjg0OWE3Y2E3ZjU5NDIgPSAkKGA8ZGl2IGlkPSJodG1sX2NiMmVlNDM2YjJjYjQxNDM4ZmI4NDlhN2NhN2Y1OTQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdSBDaGV2YWw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTg1NThhZmQzYWNjNGZlYjk4ZDhhMjY1ZGM0MGZlOTguc2V0Q29udGVudChodG1sX2NiMmVlNDM2YjJjYjQxNDM4ZmI4NDlhN2NhN2Y1OTQyKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzk2ZWZkYWU3YThhYjRjNWI5NzE3ZWRiYTMxMGRmMjFiLmJpbmRQb3B1cChwb3B1cF85ODU1OGFmZDNhY2M0ZmViOThkOGEyNjVkYzQwZmU5OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOTdmOTA1OTNhNmY0ZjhjYmE5NzM1OTUyNDIzZWE5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg5MDUyMjYsIC04Ny42MzA3ODM0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82ZWVlYWUyNzQwMTg0MjFkODZkMjU4ZDdjNmU5OGRhZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzdlYWM3MDU3NGE4NGM4ODg1NzVlODhiMjExNDU3NmQgPSAkKGA8ZGl2IGlkPSJodG1sX2M3ZWFjNzA1NzRhODRjODg4NTc1ZTg4YjIxMTQ1NzZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Yb2NvPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZlZWVhZTI3NDAxODQyMWQ4NmQyNThkN2M2ZTk4ZGFlLnNldENvbnRlbnQoaHRtbF9jN2VhYzcwNTc0YTg0Yzg4ODU3NWU4OGIyMTE0NTc2ZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mOTdmOTA1OTNhNmY0ZjhjYmE5NzM1OTUyNDIzZWE5NS5iaW5kUG9wdXAocG9wdXBfNmVlZWFlMjc0MDE4NDIxZDg2ZDI1OGQ3YzZlOThkYWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTA1YzI0MmVmNDk0NDcyNjg0NTEwNmVlZjI5YmQ3ZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wNTgzMjE3LCAtODcuNjgzNzQ3OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzQ2YzJkZGExZjdiNDYxNTk1ZjU5M2VhMTliNmNmZDcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2RlOWJmZTE0ZDdlOTRmMDViZjE0ZDFlODc5ZTBjMTE0ID0gJChgPGRpdiBpZD0iaHRtbF9kZTliZmUxNGQ3ZTk0ZjA1YmYxNGQxZTg3OWUwYzExNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWzigJlzIERlbGk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzQ2YzJkZGExZjdiNDYxNTk1ZjU5M2VhMTliNmNmZDcuc2V0Q29udGVudChodG1sX2RlOWJmZTE0ZDdlOTRmMDViZjE0ZDFlODc5ZTBjMTE0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzEwNWMyNDJlZjQ5NDQ3MjY4NDUxMDZlZWYyOWJkN2Y1LmJpbmRQb3B1cChwb3B1cF9jNDZjMmRkYTFmN2I0NjE1OTVmNTkzZWExOWI2Y2ZkNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81ODE1MTc2OWE3Mzk0MWM2YWEwMjY3MjhkYWExMWVhZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg4NjU5OTgsIC04Ny42NDg0NTE0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80M2JkZjMzOGEzZWU0OGY0YmZiNDIyMWU0NjYzYzNhYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZmY1NDUyMWExNGNmNDFkY2IyNjY3ZDM0ZTY3MTc2MTYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZmNTQ1MjFhMTRjZjQxZGNiMjY2N2QzNGU2NzE3NjE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QdWJsaWNhbiBRdWFsaXR5IE1lYXRzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQzYmRmMzM4YTNlZTQ4ZjRiZmI0MjIxZTQ2NjNjM2FhLnNldENvbnRlbnQoaHRtbF9mZjU0NTIxYTE0Y2Y0MWRjYjI2NjdkMzRlNjcxNzYxNik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81ODE1MTc2OWE3Mzk0MWM2YWEwMjY3MjhkYWExMWVhZC5iaW5kUG9wdXAocG9wdXBfNDNiZGYzMzhhM2VlNDhmNGJmYjQyMjFlNDY2M2MzYWEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDQxNWU2OWY2ODA4NDI2OWI2M2ZiMTMzMTk3ODQwMzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS45MDAyNTAxLCAtODcuNjI1MDc4MV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTExNzY5MDRkNWYxNGMwZTgyMGUzMTA3Y2RkMWU4NzkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdmNDgxYWQ3YjlmZDQwOWNhNTgxZjY0MTI5MmRlOWU4ID0gJChgPGRpdiBpZD0iaHRtbF83ZjQ4MWFkN2I5ZmQ0MDljYTU4MWY2NDEyOTJkZTllOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVuZHJpY2t4IEJlbGdpYW4gQnJlYWQgQ3JhZnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xMTE3NjkwNGQ1ZjE0YzBlODIwZTMxMDdjZGQxZTg3OS5zZXRDb250ZW50KGh0bWxfN2Y0ODFhZDdiOWZkNDA5Y2E1ODFmNjQxMjkyZGU5ZTgpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZDQxNWU2OWY2ODA4NDI2OWI2M2ZiMTMzMTk3ODQwMzQuYmluZFBvcHVwKHBvcHVwXzExMTc2OTA0ZDVmMTRjMGU4MjBlMzEwN2NkZDFlODc5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzA1NDY5YzA2NWY5NTRjMjRhMjM4YjY0OTExNjI4YzExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODU5MDU0MSwgLTg3LjYyNTIwMDddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE4NmFiYmI1MDMyZDQ5NDdiNTE2MjI5YmMzNDc3MzJiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNDQxMmFkNzU5ZTM0NjEzYTg2MWZiYTM5MWFhNjg0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjQ0MTJhZDc1OWUzNDYxM2E4NjFmYmEzOTFhYTY4NDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFjYWRpYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xODZhYmJiNTAzMmQ0OTQ3YjUxNjIyOWJjMzQ3NzMyYi5zZXRDb250ZW50KGh0bWxfYjQ0MTJhZDc1OWUzNDYxM2E4NjFmYmEzOTFhYTY4NDkpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMDU0NjljMDY1Zjk1NGMyNGEyMzhiNjQ5MTE2MjhjMTEuYmluZFBvcHVwKHBvcHVwXzE4NmFiYmI1MDMyZDQ5NDdiNTE2MjI5YmMzNDc3MzJiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzM1MTY4ODMzZTVmNjQ4NWE5MjI3ZDBiZjBmNWUzMTY4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTEwMjAzMSwgLTg3LjY4Mjg3NTI5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wYWE4NDVhNTcxZDg0NTA3YjZhYjU3MzczMjNjOTYxMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTBhMWI1MGE2YzE2NDQ2YzlhNzdlYTg0YmVhYjFlNmMgPSAkKGA8ZGl2IGlkPSJodG1sXzkwYTFiNTBhNmMxNjQ0NmM5YTc3ZWE4NGJlYWIxZTZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CaXJjaHdvb2QgS2l0Y2hlbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wYWE4NDVhNTcxZDg0NTA3YjZhYjU3MzczMjNjOTYxMS5zZXRDb250ZW50KGh0bWxfOTBhMWI1MGE2YzE2NDQ2YzlhNzdlYTg0YmVhYjFlNmMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMzUxNjg4MzNlNWY2NDg1YTkyMjdkMGJmMGY1ZTMxNjguYmluZFBvcHVwKHBvcHVwXzBhYTg0NWE1NzFkODQ1MDdiNmFiNTczNzMyM2M5NjExKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzVmZDc5Y2Q1MmJiNjQ3NTE4ZmI1ZjFkYzc4MWM1ODFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTA5NzU1OCwgLTg3LjcxNzY3MjddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVkYjdiZDdjZTFlZjQwNmNiOWM3YTNiMzJkMzE0YWI4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hNzRjODlmM2I0MTI0ZGNiYWMxMzQ0ZTRhMjkzODQ1OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTc0Yzg5ZjNiNDEyNGRjYmFjMTM0NGU0YTI5Mzg0NTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbWl0YXMgUHVlYmxhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzVkYjdiZDdjZTFlZjQwNmNiOWM3YTNiMzJkMzE0YWI4LnNldENvbnRlbnQoaHRtbF9hNzRjODlmM2I0MTI0ZGNiYWMxMzQ0ZTRhMjkzODQ1OCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81ZmQ3OWNkNTJiYjY0NzUxOGZiNWYxZGM3ODFjNTgxZS5iaW5kUG9wdXAocG9wdXBfNWRiN2JkN2NlMWVmNDA2Y2I5YzdhM2IzMmQzMTRhYjgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGVjMjVhZWQwMmMzNDQ0Nzg5OTc3YTMzNDU3OWNiZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44MzQ1MzAyLCAtODcuNjQ1NjQ5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTRkNmQxZjI1NGQ1NDg4YmJkMWFhYTJmYmU0YWI2YTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ZhNDE2MmNiNGQ4NjRkNjZhZDFhZGQzZTRhMzU0MmY5ID0gJChgPGRpdiBpZD0iaHRtbF9mYTQxNjJjYjRkODY0ZDY2YWQxYWRkM2U0YTM1NDJmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmFuYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNGQ2ZDFmMjU0ZDU0ODhiYmQxYWFhMmZiZTRhYjZhNi5zZXRDb250ZW50KGh0bWxfZmE0MTYyY2I0ZDg2NGQ2NmFkMWFkZDNlNGEzNTQyZjkpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMGVjMjVhZWQwMmMzNDQ0Nzg5OTc3YTMzNDU3OWNiZjguYmluZFBvcHVwKHBvcHVwXzE0ZDZkMWYyNTRkNTQ4OGJiZDFhYWEyZmJlNGFiNmE2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzA0OTM5MDk3YzhjNjQyY2RiNWEyZTRkNDdiM2YzM2M0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTI3NjIwNywgLTg3LjcwNjc5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOWYxMTg2MzljZTQ5NGVmMGEyY2I3MjQ4YzM0YTBiMGIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzU4NjQ1YzcyMTczNDQ0YmJhMWVmZmM1ZGU1MzE1NDYyID0gJChgPGRpdiBpZD0iaHRtbF81ODY0NWM3MjE3MzQ0NGJiYTFlZmZjNWRlNTMxNTQ2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+THVsYSBDYWZlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzlmMTE4NjM5Y2U0OTRlZjBhMmNiNzI0OGMzNGEwYjBiLnNldENvbnRlbnQoaHRtbF81ODY0NWM3MjE3MzQ0NGJiYTFlZmZjNWRlNTMxNTQ2Mik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wNDkzOTA5N2M4YzY0MmNkYjVhMmU0ZDQ3YjNmMzNjNC5iaW5kUG9wdXAocG9wdXBfOWYxMTg2MzljZTQ5NGVmMGEyY2I3MjQ4YzM0YTBiMGIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGNiNDViMTc1MjNmNDZmOTgwNDQwZDQzM2NmMWJmYzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS45Mzg0NDE5LCAtODcuNjQ0NjQzNjk5OTk5OTldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2VjY2I2NjE3MzYxNjQ5MWI4OTFiZWIxZmRhMzI3NDkyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81MDhiZTFjYmMyMzk0YjQxOGU2OWRiYjI0ZGY1NWEzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTA4YmUxY2JjMjM5NGI0MThlNjlkYmIyNGRmNTVhM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyb2cgbiBTbmFpbDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lY2NiNjYxNzM2MTY0OTFiODkxYmViMWZkYTMyNzQ5Mi5zZXRDb250ZW50KGh0bWxfNTA4YmUxY2JjMjM5NGI0MThlNjlkYmIyNGRmNTVhM2UpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZGNiNDViMTc1MjNmNDZmOTgwNDQwZDQzM2NmMWJmYzUuYmluZFBvcHVwKHBvcHVwX2VjY2I2NjE3MzYxNjQ5MWI4OTFiZWIxZmRhMzI3NDkyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzNhNzM2Y2YzNzg1OTQ5ZDc5MzkxNGJkNDQzMmUzNjBkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTQ1MTA0NCwgLTg3LjY2MzY4MTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzliMzcxNWI3NzAyMTQxNGI4NzRkMTdjMTY2OWMxNDRjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hZjNjNGEyYzdmZTI0ZTQ0ODZkYTg3YjRkY2EwMjU1MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWYzYzRhMmM3ZmUyNGU0NDg2ZGE4N2I0ZGNhMDI1NTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNyb3NieeKAmXMgS2l0Y2hlbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85YjM3MTViNzcwMjE0MTRiODc0ZDE3YzE2NjljMTQ0Yy5zZXRDb250ZW50KGh0bWxfYWYzYzRhMmM3ZmUyNGU0NDg2ZGE4N2I0ZGNhMDI1NTEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfM2E3MzZjZjM3ODU5NDlkNzkzOTE0YmQ0NDMyZTM2MGQuYmluZFBvcHVwKHBvcHVwXzliMzcxNWI3NzAyMTQxNGI4NzRkMTdjMTY2OWMxNDRjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2NkNzU0ZGQ4YjQ3YjQ1MWE4OGJmNmI2ZDRjNDUxOTAwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTMwMTEwNywgLTg3LjcwNzI0MDhdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzA5YTM1YmQ1NzYzOTQ5MGU4YWJhZmQ2MWNhM2JhYjljID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iZDJhNjAyZWMzYTc0NjEzYWZmN2E0NWIwZGFiNzA3MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmQyYTYwMmVjM2E3NDYxM2FmZjdhNDViMGRhYjcwNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvbmdtYW4gJiBFYWdsZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wOWEzNWJkNTc2Mzk0OTBlOGFiYWZkNjFjYTNiYWI5Yy5zZXRDb250ZW50KGh0bWxfYmQyYTYwMmVjM2E3NDYxM2FmZjdhNDViMGRhYjcwNzApOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfY2Q3NTRkZDhiNDdiNDUxYTg4YmY2YjZkNGM0NTE5MDAuYmluZFBvcHVwKHBvcHVwXzA5YTM1YmQ1NzYzOTQ5MGU4YWJhZmQ2MWNhM2JhYjljKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzlmMmVhMWJjOTc0MzQ3YTk4ZWJhNDU3NDllZmIyM2Q4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODkxMjkwMDAwMDAwMDEsIC04Ny42NTU1NTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc2ZGZkZDc0OTU5ZDQ4MjY5M2Y4YWM0ZmUzNTUxMTdlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85MDllMzBkYjllNmU0ZDJhODBmMjkyY2IyNjFjMzcwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTA5ZTMwZGI5ZTZlNGQyYTgwZjI5MmNiMjYxYzM3MDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhcmk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzZkZmRkNzQ5NTlkNDgyNjkzZjhhYzRmZTM1NTExN2Uuc2V0Q29udGVudChodG1sXzkwOWUzMGRiOWU2ZTRkMmE4MGYyOTJjYjI2MWMzNzAyKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzlmMmVhMWJjOTc0MzQ3YTk4ZWJhNDU3NDllZmIyM2Q4LmJpbmRQb3B1cChwb3B1cF83NmRmZGQ3NDk1OWQ0ODI2OTNmOGFjNGZlMzU1MTE3ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZWQ5NGNiNWU5Yjk0NDBiYTU0YjVmYTU4ODE5MTkxMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg2Nzg1MjksIC04Ny42NDE5Mjg5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yYjdhNmNiYzI3ODg0ODJmOTE2OTFkNGY0ZWU0YWNlNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzJlNGU4OTU2NmExNGY5NmI4NDUxOGY1MzIzZWI2NjkgPSAkKGA8ZGl2IGlkPSJodG1sXzMyZTRlODk1NjZhMTRmOTZiODQ1MThmNTMyM2ViNjY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYW5ueeKAmXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMmI3YTZjYmMyNzg4NDgyZjkxNjkxZDRmNGVlNGFjZTcuc2V0Q29udGVudChodG1sXzMyZTRlODk1NjZhMTRmOTZiODQ1MThmNTMyM2ViNjY5KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2JlZDk0Y2I1ZTliOTQ0MGJhNTRiNWZhNTg4MTkxOTEyLmJpbmRQb3B1cChwb3B1cF8yYjdhNmNiYzI3ODg0ODJmOTE2OTFkNGY0ZWU0YWNlNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81MGZlZTY4NTIxM2Y0MDc0YjQ5ZDAyODBmN2Y2NTZiZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg4NTI2OTEsIC04Ny42MTg0ODM3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kNzVmZTc1NjM3MmE0NzRkOWFiNjhjNGNmNDk1ZjI0MiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2E1MGU0YmNmNmJhNDEzOGEwY2NjNDI5YjIwZDcwMDggPSAkKGA8ZGl2IGlkPSJodG1sXzdhNTBlNGJjZjZiYTQxMzhhMGNjYzQyOWIyMGQ3MDA4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZ2d54oCZczwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kNzVmZTc1NjM3MmE0NzRkOWFiNjhjNGNmNDk1ZjI0Mi5zZXRDb250ZW50KGh0bWxfN2E1MGU0YmNmNmJhNDEzOGEwY2NjNDI5YjIwZDcwMDgpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNTBmZWU2ODUyMTNmNDA3NGI0OWQwMjgwZjdmNjU2YmUuYmluZFBvcHVwKHBvcHVwX2Q3NWZlNzU2MzcyYTQ3NGQ5YWI2OGM0Y2Y0OTVmMjQyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Y2MzllMjRmMGExMTRiMTU4MTZiNzYyOWE5YjEwZTc5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTA4MDUzOSwgLTg3LjYzNDMxMTNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZlMzYzZDEzYjQxOTRlYWJiNmIwODA2MjIwMzliMjI0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xNTkwNzMzNTU5OTA0M2U5ODE0M2RjNmNkNWY0N2ZjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU5MDczMzU1OTkwNDNlOTgxNDNkYzZjZDVmNDdmYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9sZCBKZXJ1c2FsZW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZmUzNjNkMTNiNDE5NGVhYmI2YjA4MDYyMjAzOWIyMjQuc2V0Q29udGVudChodG1sXzE1OTA3MzM1NTk5MDQzZTk4MTQzZGM2Y2Q1ZjQ3ZmM3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2Y2MzllMjRmMGExMTRiMTU4MTZiNzYyOWE5YjEwZTc5LmJpbmRQb3B1cChwb3B1cF9mZTM2M2QxM2I0MTk0ZWFiYjZiMDgwNjIyMDM5YjIyNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85MTE3Zjc5NTgzNzY0NGY5OTI4ZjdhYzAyNzExMDA0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjkxMzY5NTM5OTk5OTk5LCAtODcuNjc3MTI3M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODE2MTg5ZTg0NGM1NDMyNDk1YTJjZTdhNmI2OWJkYjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QxNDJkM2M2OTcxMDQ2NDJiY2I5OWE5MDIxZWMxNjBjID0gJChgPGRpdiBpZD0iaHRtbF9kMTQyZDNjNjk3MTA0NjQyYmNiOTlhOTAyMWVjMTYwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWluZHnigJlzIEhvdENob2NvbGF0ZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84MTYxODllODQ0YzU0MzI0OTVhMmNlN2E2YjY5YmRiMy5zZXRDb250ZW50KGh0bWxfZDE0MmQzYzY5NzEwNDY0MmJjYjk5YTkwMjFlYzE2MGMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOTExN2Y3OTU4Mzc2NDRmOTkyOGY3YWMwMjcxMTAwNGYuYmluZFBvcHVwKHBvcHVwXzgxNjE4OWU4NDRjNTQzMjQ5NWEyY2U3YTZiNjliZGIzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Y2ODFhN2Q3M2MzOTQzOTM4MjhjMGI1NDUwMWRmNDFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTUzNjY1OSwgLTg3Ljg1NzgwMzVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzUyOTdjMTIwZTEwOTQzODA4MTRkYTc4NmQzZjRmOGZhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kNjUyN2VkZTU4MWQ0MGU5YmM0MWNmMWZmOWM2ZmZjYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDY1MjdlZGU1ODFkNDBlOWJjNDFjZjFmZjljNmZmY2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9sZ2HigJlzIERlbGljYXRlc3NlbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81Mjk3YzEyMGUxMDk0MzgwODE0ZGE3ODZkM2Y0ZjhmYS5zZXRDb250ZW50KGh0bWxfZDY1MjdlZGU1ODFkNDBlOWJjNDFjZjFmZjljNmZmY2MpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZjY4MWE3ZDczYzM5NDM5MzgyOGMwYjU0NTAxZGY0MWMuYmluZFBvcHVwKHBvcHVwXzUyOTdjMTIwZTEwOTQzODA4MTRkYTc4NmQzZjRmOGZhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2EyY2Y5NTBhOTM3MDRhMGRhMDRmMDA4MWVhNjJhZjhmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTc5NDQ5NiwgLTg3LjY2Nzk1NzE5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zNDFmZDVlMGY5YTc0YjM1YTM0OGY4MWE3MDc1N2NlMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzY0NGQ0ZDNjMDg3NDA3YzhhODZlOGE0NDE3ZWQyNTAgPSAkKGA8ZGl2IGlkPSJodG1sX2M2NDRkNGQzYzA4NzQwN2M4YTg2ZThhNDQxN2VkMjUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CaWcgSm9uZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMzQxZmQ1ZTBmOWE3NGIzNWEzNDhmODFhNzA3NTdjZTMuc2V0Q29udGVudChodG1sX2M2NDRkNGQzYzA4NzQwN2M4YTg2ZThhNDQxN2VkMjUwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2EyY2Y5NTBhOTM3MDRhMGRhMDRmMDA4MWVhNjJhZjhmLmJpbmRQb3B1cChwb3B1cF8zNDFmZDVlMGY5YTc0YjM1YTM0OGY4MWE3MDc1N2NlMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85MmMwYTljYTViYWI0ZmU0YWE5NjI4YTU2MjNmODc3MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjk1NDE2MiwgLTg3LjcwMjcxMDc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wYzFkNjgxNjgxNjQ0Y2EwODdlNmMxZjUyN2IxZTkzMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfM2M1OTgxZDUyNTc2NGIzY2I3MzhjOTJkMTZmMWJlZDQgPSAkKGA8ZGl2IGlkPSJodG1sXzNjNTk4MWQ1MjU3NjRiM2NiNzM4YzkyZDE2ZjFiZWQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYSBQYW5lPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzBjMWQ2ODE2ODE2NDRjYTA4N2U2YzFmNTI3YjFlOTMwLnNldENvbnRlbnQoaHRtbF8zYzU5ODFkNTI1NzY0YjNjYjczOGM5MmQxNmYxYmVkNCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl85MmMwYTljYTViYWI0ZmU0YWE5NjI4YTU2MjNmODc3MS5iaW5kUG9wdXAocG9wdXBfMGMxZDY4MTY4MTY0NGNhMDg3ZTZjMWY1MjdiMWU5MzApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjBlZDM5NDY4ZWVjNDRmZjgzYjU2NGRiNWI3YTk0YzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xNTY3MDczLCAtODcuODAzNjM0NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjBiNDEwZDk2MWM3NDlmMGFjNGM5YjY2MWVkN2Y0YTAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA2YWE3MjQ5YzJmNjQzOTFhYTU2NjFkNDFjMTgyZTRlID0gJChgPGRpdiBpZD0iaHRtbF8wNmFhNzI0OWMyZjY0MzkxYWE1NjYxZDQxYzE4MmU0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWF44oCZcyBEZWxpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzYwYjQxMGQ5NjFjNzQ5ZjBhYzRjOWI2NjFlZDdmNGEwLnNldENvbnRlbnQoaHRtbF8wNmFhNzI0OWMyZjY0MzkxYWE1NjYxZDQxYzE4MmU0ZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mMGVkMzk0NjhlZWM0NGZmODNiNTY0ZGI1YjdhOTRjNC5iaW5kUG9wdXAocG9wdXBfNjBiNDEwZDk2MWM3NDlmMGFjNGM5YjY2MWVkN2Y0YTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTEzYWFmMTU2ODc2NDgyYjgwNDRlMDE3MmI0NjdhZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS45NjUyOTg3LCAtODcuNjc1NTc5NTk5OTk5OTldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE3MTgzY2EyNzYwZjRiMGU5NDI4OWQyMmZmZGVlNGViID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lN2VlYzQzNTFmMmE0M2RhODc3ZDg0OWE0MDE0ZWMzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTdlZWM0MzUxZjJhNDNkYTg3N2Q4NDlhNDAxNGVjMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNpdHkgUHJvdmlzaW9uczwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNzE4M2NhMjc2MGY0YjBlOTQyODlkMjJmZmRlZTRlYi5zZXRDb250ZW50KGh0bWxfZTdlZWM0MzUxZjJhNDNkYTg3N2Q4NDlhNDAxNGVjMzApOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMTEzYWFmMTU2ODc2NDgyYjgwNDRlMDE3MmI0NjdhZjQuYmluZFBvcHVwKHBvcHVwXzE3MTgzY2EyNzYwZjRiMGU5NDI4OWQyMmZmZGVlNGViKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzllZjg5MThiZGQ5MDQ3NDZiZGQzNDY4ZmI4MTc5Y2EyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTAyNzIxNzk5OTk5OTksIC04Ny42OTAyMTM1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83NzYyYjU3ZDExZTk0MTk4YTZkZWU2Mjg3ODkyMzNmZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMDUyZDEwMGUyZDA1NDVlYmIwMWE0ZmQ3MTBmNTYyOWEgPSAkKGA8ZGl2IGlkPSJodG1sXzA1MmQxMDBlMmQwNTQ1ZWJiMDFhNGZkNzEwZjU2MjlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXBh4oCZcyBDYWNoZSBTYWJyb3NvPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc3NjJiNTdkMTFlOTQxOThhNmRlZTYyODc4OTIzM2ZlLnNldENvbnRlbnQoaHRtbF8wNTJkMTAwZTJkMDU0NWViYjAxYTRmZDcxMGY1NjI5YSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl85ZWY4OTE4YmRkOTA0NzQ2YmRkMzQ2OGZiODE3OWNhMi5iaW5kUG9wdXAocG9wdXBfNzc2MmI1N2QxMWU5NDE5OGE2ZGVlNjI4Nzg5MjMzZmUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTkyZjdiZTQ2NjllNGFlNDhiZDgxN2UzMWE3OTlmZTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44ODkzNjgzLCAtODcuNjM0OTQ4N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNTI2OGQ0OWE1ZTg3NDI4MTgzNDU2ZWU0OTY0MjQzN2QgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzQ1YjcyOWMwNmMxMTRlNDhiY2FmOTFhNTM1ZjJhMmEyID0gJChgPGRpdiBpZD0iaHRtbF80NWI3MjljMDZjMTE0ZTQ4YmNhZjkxYTUzNWYyYTJhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF2ZXR0ZeKAmXMgQmFyICYgQm9ldWY8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTI2OGQ0OWE1ZTg3NDI4MTgzNDU2ZWU0OTY0MjQzN2Quc2V0Q29udGVudChodG1sXzQ1YjcyOWMwNmMxMTRlNDhiY2FmOTFhNTM1ZjJhMmEyKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzU5MmY3YmU0NjY5ZTRhZTQ4YmQ4MTdlMzFhNzk5ZmU0LmJpbmRQb3B1cChwb3B1cF81MjY4ZDQ5YTVlODc0MjgxODM0NTZlZTQ5NjQyNDM3ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOThmMjZkMWQ3MjY0MzVkYTE0MzUxNTU2ZDYwYTQzZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjkxMDUyNTgsIC04Ny42MzQzNzc1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81OWU3ZDZhNjRlNjE0YTdiOTI5NzgzNjI3YTZjYWY1NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODRiYzFlNmUzNWYyNGEwYzhjYTIxZDIwZDdhZGUyNTYgPSAkKGA8ZGl2IGlkPSJodG1sXzg0YmMxZTZlMzVmMjRhMGM4Y2EyMWQyMGQ3YWRlMjU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYSBGb3VybmV0dGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTllN2Q2YTY0ZTYxNGE3YjkyOTc4MzYyN2E2Y2FmNTcuc2V0Q29udGVudChodG1sXzg0YmMxZTZlMzVmMjRhMGM4Y2EyMWQyMGQ3YWRlMjU2KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2Y5OGYyNmQxZDcyNjQzNWRhMTQzNTE1NTZkNjBhNDNmLmJpbmRQb3B1cChwb3B1cF81OWU3ZDZhNjRlNjE0YTdiOTI5NzgzNjI3YTZjYWY1NykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNDYwMjhmZTRlM2E0ZTk3YWU2YjRmMTE1MTVjMzg1NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg4OTYxODgsIC04Ny42NDQ4NDI1OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMDhhMWMzYTk5YmE4NGUxNWIzMDc3OGRiYzNiNmExODYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzFlYmEwZjlkODY1NDQwNTY5ZTIwMDc0ZjFhZTNmMDQ5ID0gJChgPGRpdiBpZD0iaHRtbF8xZWJhMGY5ZDg2NTQ0MDU2OWUyMDA3NGYxYWUzZjA0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFyYW1vdW50IFJvb208L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDhhMWMzYTk5YmE4NGUxNWIzMDc3OGRiYzNiNmExODYuc2V0Q29udGVudChodG1sXzFlYmEwZjlkODY1NDQwNTY5ZTIwMDc0ZjFhZTNmMDQ5KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2E0NjAyOGZlNGUzYTRlOTdhZTZiNGYxMTUxNWMzODU3LmJpbmRQb3B1cChwb3B1cF8wOGExYzNhOTliYTg0ZTE1YjMwNzc4ZGJjM2I2YTE4NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZTU1NTk2ZmZiMDA0MmVlYmJlMmZiMWVhODQwMmRlOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjkxNTA0OTkwMDAwMDAxLCAtODcuNjc3ODA0N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfM2FkNjIxMjBlYzc1NDg4YWJiYTEzNTJmN2I4OGRjMDEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzVlNTA2ZGY1ZGU3NTRhMWY4Y2YyMmIwMTg1NmRkY2EyID0gJChgPGRpdiBpZD0iaHRtbF81ZTUwNmRmNWRlNzU0YTFmOGNmMjJiMDE4NTZkZGNhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWVsdCBTYW5kd2ljaCBTaG9wcGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2FkNjIxMjBlYzc1NDg4YWJiYTEzNTJmN2I4OGRjMDEuc2V0Q29udGVudChodG1sXzVlNTA2ZGY1ZGU3NTRhMWY4Y2YyMmIwMTg1NmRkY2EyKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzRlNTU1OTZmZmIwMDQyZWViYmUyZmIxZWE4NDAyZGU4LmJpbmRQb3B1cChwb3B1cF8zYWQ2MjEyMGVjNzU0ODhhYmJhMTM1MmY3Yjg4ZGMwMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYTc2Zjg5YTVlMDQ0MzhlOGNkMjU3ZDE2MmExMjhkMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjkyMTg1MjEsIC04Ny42NTkyMTI0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82ZmNkZTAyNjVlZGQ0YWZiYmUyZjI1M2EzZTYxNGI4ZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2M0YjgyZmNkYmQ2NGVjMGE0MDQxODVlY2RlMWVlZTEgPSAkKGA8ZGl2IGlkPSJodG1sX2NjNGI4MmZjZGJkNjRlYzBhNDA0MTg1ZWNkZTFlZWUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GbG9yaW9sZSBDYWZlICYgQmFrZXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZmY2RlMDI2NWVkZDRhZmJiZTJmMjUzYTNlNjE0YjhlLnNldENvbnRlbnQoaHRtbF9jYzRiODJmY2RiZDY0ZWMwYTQwNDE4NWVjZGUxZWVlMSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9kYTc2Zjg5YTVlMDQ0MzhlOGNkMjU3ZDE2MmExMjhkMi5iaW5kUG9wdXAocG9wdXBfNmZjZGUwMjY1ZWRkNGFmYmJlMmYyNTNhM2U2MTRiOGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmRkMWU1NTU5OWY1NDI1OWIzYjYxNWY1NTY0NDJiNDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS45Nzk3MDk5LCAtODcuNjY5MzQ0MDk5OTk5OTldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc0OGNkYTI5ZGMyOTQwNTE5NzRjNzM1MTc5NWQ4ZGQ5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hN2RiNDZmMWJmYzc0ZWQ3OWZkMjBmYzI4ZmJlOTM2NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTdkYjQ2ZjFiZmM3NGVkNzlmZDIwZmMyOGZiZTkzNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpcnN0IFNsaWNlIFBpZSBDYWbDqTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83NDhjZGEyOWRjMjk0MDUxOTc0YzczNTE3OTVkOGRkOS5zZXRDb250ZW50KGh0bWxfYTdkYjQ2ZjFiZmM3NGVkNzlmZDIwZmMyOGZiZTkzNjQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYmRkMWU1NTU5OWY1NDI1OWIzYjYxNWY1NTY0NDJiNDcuYmluZFBvcHVwKHBvcHVwXzc0OGNkYTI5ZGMyOTQwNTE5NzRjNzM1MTc5NWQ4ZGQ5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FjZTM5OTI0NWJhZDRmMjY5ZTYzNDJmOGRiMDliMWUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTYxNzEyMiwgLTg3LjY3NTgxNjIwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kMzU0ZTc4M2QxNzk0N2U0OTk0OTE0YWE4MWIzMTFiZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZGUyOTUyOTVlNTMyNDMxOTljMjc0ZjM1ODNmNDAwOWQgPSAkKGA8ZGl2IGlkPSJodG1sX2RlMjk1Mjk1ZTUzMjQzMTk5YzI3NGYzNTgzZjQwMDlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ucm9xdWV0PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2QzNTRlNzgzZDE3OTQ3ZTQ5OTQ5MTRhYTgxYjMxMWJkLnNldENvbnRlbnQoaHRtbF9kZTI5NTI5NWU1MzI0MzE5OWMyNzRmMzU4M2Y0MDA5ZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hY2UzOTkyNDViYWQ0ZjI2OWU2MzQyZjhkYjA5YjFlMi5iaW5kUG9wdXAocG9wdXBfZDM1NGU3ODNkMTc5NDdlNDk5NDkxNGFhODFiMzExYmQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2RlZWNjNTZmYTRlNDg1Mzk3YzBlYWZhMWE1ZWZiNDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44OTI5NjExOTk5OTk5OSwgLTg3LjYyNzgyMTRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhmNGExY2E2MmE0ZTRmMzk5ZGVkZjE4OTAwNTcwZGQzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kNWViOGQyMTYyNTU0NmZhYmFmYTAyNmE2ZGY0NmE2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDVlYjhkMjE2MjU1NDZmYWJhZmEwMjZhNmRmNDZhNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYWhhbXdpY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOGY0YTFjYTYyYTRlNGYzOTlkZWRmMTg5MDA1NzBkZDMuc2V0Q29udGVudChodG1sX2Q1ZWI4ZDIxNjI1NTQ2ZmFiYWZhMDI2YTZkZjQ2YTY4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzdkZWVjYzU2ZmE0ZTQ4NTM5N2MwZWFmYTFhNWVmYjQwLmJpbmRQb3B1cChwb3B1cF84ZjRhMWNhNjJhNGU0ZjM5OWRlZGYxODkwMDU3MGRkMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOTY5YjIzNGFjZjc0MGJmODk1ZWEyZjljYTY1ZTNmMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjkwNDc1NTEsIC04Ny45Mzk2NDU5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82YmU0NWIzMWNhNzA0ZGY1ODNkODU2NjJhODc2NjVkZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjU0NGZlYTAwNWQyNDg5ZTg1YzMyOGM3NDQzOTMxYWQgPSAkKGA8ZGl2IGlkPSJodG1sX2I1NDRmZWEwMDVkMjQ4OWU4NWMzMjhjNzQ0MzkzMWFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb3NhbGlh4oCZcyBEZWxpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZiZTQ1YjMxY2E3MDRkZjU4M2Q4NTY2MmE4NzY2NWRlLnNldENvbnRlbnQoaHRtbF9iNTQ0ZmVhMDA1ZDI0ODllODVjMzI4Yzc0NDM5MzFhZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wOTY5YjIzNGFjZjc0MGJmODk1ZWEyZjljYTY1ZTNmMy5iaW5kUG9wdXAocG9wdXBfNmJlNDViMzFjYTcwNGRmNTgzZDg1NjYyYTg3NjY1ZGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWVmY2UxMjI4NjA4NDJhN2JhODlkYTM1MGUwNzhhZWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS43OTEzMTg1LCAtODcuNTkzODQ1Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzEyMGQyYzhlNDJmNDJlNDhmYWJiODk5OWM5ZmZlMWYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRjYmFmOWI0Yzk4MjQxOTRiMGIyNDM1ODcxNGVlZTY0ID0gJChgPGRpdiBpZD0iaHRtbF80Y2JhZjliNGM5ODI0MTk0YjBiMjQzNTg3MTRlZWU2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WiZIIE1hcmtldENhZmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzEyMGQyYzhlNDJmNDJlNDhmYWJiODk5OWM5ZmZlMWYuc2V0Q29udGVudChodG1sXzRjYmFmOWI0Yzk4MjQxOTRiMGIyNDM1ODcxNGVlZTY0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzFlZmNlMTIyODYwODQyYTdiYTg5ZGEzNTBlMDc4YWVjLmJpbmRQb3B1cChwb3B1cF83MTIwZDJjOGU0MmY0MmU0OGZhYmI4OTk5YzlmZmUxZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTU0YjU5NzY3MGU0NTA0YmIwYzY2M2M3MTllOTRmMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjI1MTc4NDA5OTk5OTk5LCAtODcuODQxMzUzNV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWYyYTAyMmRmYjJjNDc4Mjk2ZWM2NjEzNjAyZTRkOGQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzAzYjI5NTg0ZWJlZjQ4MzU4MWJkZjVmYzBlZWRkMGRlID0gJChgPGRpdiBpZD0iaHRtbF8wM2IyOTU4NGViZWY0ODM1ODFiZGY1ZmMwZWVkZDBkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFya2V0IEhvdXNlIG9uIHRoZSBTcXVhcmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWYyYTAyMmRmYjJjNDc4Mjk2ZWM2NjEzNjAyZTRkOGQuc2V0Q29udGVudChodG1sXzAzYjI5NTg0ZWJlZjQ4MzU4MWJkZjVmYzBlZWRkMGRlKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2ZlNTRiNTk3NjcwZTQ1MDRiYjBjNjYzYzcxOWU5NGYwLmJpbmRQb3B1cChwb3B1cF9hZjJhMDIyZGZiMmM0NzgyOTZlYzY2MTM2MDJlNGQ4ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84NGVjN2RjNWE4MmM0YTkwYjQwZTEyYTcwMGM3MWFmZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjkxNTI4NzUsIC04Ny42MzQzODg4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mYzM1NjA5NDI2Yjg0ODIwYTZhZTY3MGZiYjkzMWRhNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNWFlMDAyZWIxMjVjNDZlM2E4MGU1YmJhNDYyOTEyNzYgPSAkKGA8ZGl2IGlkPSJodG1sXzVhZTAwMmViMTI1YzQ2ZTNhODBlNWJiYTQ2MjkxMjc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbGFpbmXigJlzIENvZmZlZSBDYWxsPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZjMzU2MDk0MjZiODQ4MjBhNmFlNjcwZmJiOTMxZGE3LnNldENvbnRlbnQoaHRtbF81YWUwMDJlYjEyNWM0NmUzYTgwZTViYmE0NjI5MTI3Nik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl84NGVjN2RjNWE4MmM0YTkwYjQwZTEyYTcwMGM3MWFmZC5iaW5kUG9wdXAocG9wdXBfZmMzNTYwOTQyNmI4NDgyMGE2YWU2NzBmYmI5MzFkYTcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTE1MDFlMDNiMTU3NDQ2OWIyZGFkMGYyMmE1MTQ2ZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44ODYzNjIyLCAtODcuODAyMjI5N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjM0NjBkOGI0ZGI1NDUzOGE5ZTNkMGRkZmE2MTgxODQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2IyYjMxZjZhMTE2MTQyNmFiNWU0NmZlYjcyYTg4NmM3ID0gJChgPGRpdiBpZD0iaHRtbF9iMmIzMWY2YTExNjE0MjZhYjVlNDZmZWI3MmE4ODZjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFyaW9uIFN0cmVldCBDaGVlc2UgTWFya2V0PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzYzNDYwZDhiNGRiNTQ1MzhhOWUzZDBkZGZhNjE4MTg0LnNldENvbnRlbnQoaHRtbF9iMmIzMWY2YTExNjE0MjZhYjVlNDZmZWI3MmE4ODZjNyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hMTUwMWUwM2IxNTc0NDY5YjJkYWQwZjIyYTUxNDZkMy5iaW5kUG9wdXAocG9wdXBfNjM0NjBkOGI0ZGI1NDUzOGE5ZTNkMGRkZmE2MTgxODQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjFlMDQyMWUyNDExNDI0ZjkxMGZkYjI3OWI2MTYwYTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44NzU4MTAyLCAtODcuNjI2NDQ4OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xNDkwY2VlNmU4YzI0MzBjOTkwMWNlZjUwMTU2YTM1MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjA0ODljZmMwMzI4NDY0NDkwMjQ0ZDBkMTdiNmQ0MGQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2IyOWEzOTJiZmFjZDQ4MmU4MGEzY2RmYjJlNDhjMGUwID0gJChgPGRpdiBpZD0iaHRtbF9iMjlhMzkyYmZhY2Q0ODJlODBhM2NkZmIyZTQ4YzBlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FmZWNpdG88L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjA0ODljZmMwMzI4NDY0NDkwMjQ0ZDBkMTdiNmQ0MGQuc2V0Q29udGVudChodG1sX2IyOWEzOTJiZmFjZDQ4MmU4MGEzY2RmYjJlNDhjMGUwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2IxZTA0MjFlMjQxMTQyNGY5MTBmZGIyNzliNjE2MGExLmJpbmRQb3B1cChwb3B1cF9iMDQ4OWNmYzAzMjg0NjQ0OTAyNDRkMGQxN2I2ZDQwZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYzI2NDc5ZjhiNjM0ZmRjYTBlMWQwMDM3YzllZjYyNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg5NjA3MzgsIC04Ny42Nzc4MTg1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kNjYyYzFhZjRhMWU0YWM4OWMxOGRjYzcxYzk0YzY3NCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGZjZDA1YzA2NDAyNDA5OGFhNTFlYWE5OTMyZDEwMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzRmY2QwNWMwNjQwMjQwOThhYTUxZWFhOTkzMmQxMDAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGlja3BlYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kNjYyYzFhZjRhMWU0YWM4OWMxOGRjYzcxYzk0YzY3NC5zZXRDb250ZW50KGh0bWxfNGZjZDA1YzA2NDAyNDA5OGFhNTFlYWE5OTMyZDEwMDEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMGMyNjQ3OWY4YjYzNGZkY2EwZTFkMDAzN2M5ZWY2MjUuYmluZFBvcHVwKHBvcHVwX2Q2NjJjMWFmNGExZTRhYzg5YzE4ZGNjNzFjOTRjNjc0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzdjNjU5MWYwNGE3OTRkZGFiN2Y5OTk0YzkxODFkNjBiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODk4OTc4NTAwMDAwMDEsIC04Ny42MjczOTI2XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82OTYzZThhYTNkNGY0ZmMyOTJhODU5NDJhNTcxYWE4YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzY2MDBiMWFlMmVlNGU0MDliYWM5OTI3MzQwOWQ3YWEgPSAkKGA8ZGl2IGlkPSJodG1sXzc2NjAwYjFhZTJlZTRlNDA5YmFjOTkyNzM0MDlkN2FhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgR29kZGVzcyBhbmQgR3JvY2VyPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzY5NjNlOGFhM2Q0ZjRmYzI5MmE4NTk0MmE1NzFhYThiLnNldENvbnRlbnQoaHRtbF83NjYwMGIxYWUyZWU0ZTQwOWJhYzk5MjczNDA5ZDdhYSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83YzY1OTFmMDRhNzk0ZGRhYjdmOTk5NGM5MTgxZDYwYi5iaW5kUG9wdXAocG9wdXBfNjk2M2U4YWEzZDRmNGZjMjkyYTg1OTQyYTU3MWFhOGIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2M2Yzk2YjJlMDUyNGY2NmJmOTU5ZDUxNjQ3YjFjMzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS45MTA1ODMyLCAtODcuOTQwNDg4Mzk5OTk5OTldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTQ5MGNlZTZlOGMyNDMwYzk5MDFjZWY1MDE1NmEzNTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2I0YmU5YTM4ZjM1YzQ1MTE5NTJkOGY5NDNlZGYzNDhjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lNmIyZDg0MGU2MDE0ZTQ0OWFiMmJlY2M1ZDdhOTVkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTZiMmQ4NDBlNjAxNGU0NDlhYjJiZWNjNWQ3YTk1ZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlplbndpY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjRiZTlhMzhmMzVjNDUxMTk1MmQ4Zjk0M2VkZjM0OGMuc2V0Q29udGVudChodG1sX2U2YjJkODQwZTYwMTRlNDQ5YWIyYmVjYzVkN2E5NWQxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzdjNmM5NmIyZTA1MjRmNjZiZjk1OWQ1MTY0N2IxYzMxLmJpbmRQb3B1cChwb3B1cF9iNGJlOWEzOGYzNWM0NTExOTUyZDhmOTQzZWRmMzQ4YykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMjExODNlNGRmMDU0ZjRhOGIwOGJhOGVjNzg1MDRmZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg4MzEwNjEsIC04Ny42MjU0MzgxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xNGYyN2E1YWJhNzQ0ZTQwYmQ3YzUzZWYzZDAyNDZiMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2IyODNmZDhhYjI0NGI4N2JiNDQ2NjA0NGZmYjBkNTUgPSAkKGA8ZGl2IGlkPSJodG1sXzdiMjgzZmQ4YWIyNDRiODdiYjQ0NjYwNDRmZmIwZDU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub25pIFBhdGlzc2VyaWU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTRmMjdhNWFiYTc0NGU0MGJkN2M1M2VmM2QwMjQ2YjMuc2V0Q29udGVudChodG1sXzdiMjgzZmQ4YWIyNDRiODdiYjQ0NjYwNDRmZmIwZDU1KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2QyMTE4M2U0ZGYwNTRmNGE4YjA4YmE4ZWM3ODUwNGZmLmJpbmRQb3B1cChwb3B1cF8xNGYyN2E1YWJhNzQ0ZTQwYmQ3YzUzZWYzZDAyNDZiMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZGZlNzFiZmMzY2I0NWM3YTdmMTAyNTUxMGM0MTYyNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjk0MzE2MzIsIC04Ny42NDQ1MDcxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzE0OTBjZWU2ZThjMjQzMGM5OTAxY2VmNTAxNTZhMzUwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hYWVhOTViOWQ2Mjg0NmE0OGI1MzU2NGIwNTczZjc5OCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjc0NDg1MDgzNzUwNGQ5ZjhlZDQ1MTU5MjE4NjgyMWMgPSAkKGA8ZGl2IGlkPSJodG1sXzY3NDQ4NTA4Mzc1MDRkOWY4ZWQ0NTE1OTIxODY4MjFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaG9lYmXigJlzIEJha2VyeTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hYWVhOTViOWQ2Mjg0NmE0OGI1MzU2NGIwNTczZjc5OC5zZXRDb250ZW50KGh0bWxfNjc0NDg1MDgzNzUwNGQ5ZjhlZDQ1MTU5MjE4NjgyMWMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYmRmZTcxYmZjM2NiNDVjN2E3ZjEwMjU1MTBjNDE2MjcuYmluZFBvcHVwKHBvcHVwX2FhZWE5NWI5ZDYyODQ2YTQ4YjUzNTY0YjA1NzNmNzk4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKPC9zY3JpcHQ+ onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x2a71113c808>"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mapping = folium.Map(location = [df['lat'].mean(), df['lng'].mean()],\n",
" zoom_start = 11)\n",
"\n",
"for n in df.index:\n",
" # 앞서 언급했듯이 주소가 \"Multiple\"로 되어있는 것들은 제외시킨다\n",
" if df['Address'][n] != 'Multiple':\n",
" folium.Marker([df['lat'][n], df['lng'][n]], # '위도 및 경도' 정보 표기\n",
" popup = df['Cafe'][n]).add_to(mapping) # popup 옵션으로 '가게 이름' 표기\n",
"\n",
"mapping"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**<분석을 마치며...>**\n",
"- 이번 챕터에서는 ```BeautifulSoup``` 라이브러리를 사용해서 인터넷의 정보를 가져오는 \"웹 스크래핑(크롤링)\" 작업을 수행해보았다\n",
" - 단순히 한 페이지만 읽는 것이 아니라, 메인 페이지에 연결된 다른 페이지들도 모두 대상으로 해서 \"크롤링\"을 수행했다\n",
"- HTML에 대한 지식이 없어서 그런지 크롤링을 할 때 좀 힘들었다...(아직 배워야 할게 많구나 ㅜㅜ)\n",
" - 이번 분석을 수행하면서 HTML에 대해서 공부해야겠다는 생각을 하게 되었다 ^^.."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment