21
Business = {
(@Core.Unit #{
url: {
Gather.URL
}
name: {
Select.Name
Gather.FullName
}
claimedStatus: {
Select.ClaimedStatus
}
rating: {
Select.Rating
Text.Rating
}
reviewCount: {
Select.ReviewCount
Gather.Number
}
categories: {
Select.Categories
}
address: {
Select.Address
}
crossStreets: {
Select.CrossStreets
}
neighborhood: {
Select.Neighborhood
}
phone: {
Select.Phone
}
website: {
Select.Website
}
priceRange: {
Select.PriceRange
}
healthScore: {
Select.HealthScore
}
fullMenu: {
Select.FullMenu
Gather.FullMenuLink
}
mondayHours: {
(GetHours {
"Mon"
})
}
tuesdayHours: {
(GetHours {
"Tue"
})
}
wednesdayHours: {
(GetHours {
"Wed"
})
}
thursdayHours: {
(GetHours {
"Thu"
})
}
fridayHours: {
(GetHours {
"Fri"
})
}
saturdayHours: {
(GetHours {
"Sat"
})
}
sundayHours: {
(GetHours {
"Sun"
})
}
moreBusinessInfo: {
Select.MoreBusinessInfo
(@Core.Unit #{
name: {
(SelectBy.Css {
"dt"
})
}
value: {
(SelectBy.Css {
"dd"
})
}
})
}
})
}
GetHours = {
\day.{
Select.Hours
Gather.PrevText -> actual
(Sequence.Guard {
(@Core.Equal {
day
} {
actual
})
})
Gather.Text
}
}
Main = {
Setup -> { searchTerm location maxPages }
(Browser.Load {
"http://www.yelp.com/?hl=en_US"
})
(Browser.FillFormAndSubmit {
[{
searchTerm
} {
location
}]
} {
[{
Select.TermInput
} {
Select.LocationInput
}]
} {
1000
})
(Sequence.Take {
maxPages
} {
(Browser.TurnPages {
Select.NextButton
})
})
Select.BusinessLink
Browser.Navigate
(Browser.Wait {
1000
})
Business
}
Setup = {
(@Core.Unit #{
searchTerm: {
"burgers"
}
location: {
"new york city"
}
maxPages: {
4
}
})
}
true
Rating
Title
Regex
false
false
([\.\,]\d+)|\d+([\.\,\d]*\d)?
0
0
Main
url
String
name
String
claimedStatus
String
rating
String
reviewCount
String
categories
String
address
String
crossStreets
String
neighborhood
String
phone
String
website
String
priceRange
String
healthScore
String
fullMenu
String
mondayHours
String
tuesdayHours
String
wednesdayHours
String
thursdayHours
String
fridayHours
String
saturdayHours
String
sundayHours
String
moreBusinessInfo
name
String
value
String
Address
{
"class2": {
"map-box-address": true,
"u-space-l4": true
},
"visible": {
"val": true
},
"class3": {
"u-relative": true
},
"classes": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": "u-relative"
},
"tag2": {
"val": "DIV"
},
"class1": {
"street-address": true
},
"color": {
"val": "rgb(51, 51, 51)"
},
"classes2": {
"val": "map-box-address u-space-l4"
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 1
},
"classes1": {
"val": "street-address"
},
"tag": {
"val": "ADDRESS"
},
"tag3": {
"val": "LI"
},
"tag1": {
"val": "STRONG"
},
"_tolerance": {
"val": 0.044
}
}
BusinessLink
{
"visible": {
"val": true
},
"class": {
"lemon--a__373c0__IEZFH": true,
"link__373c0__29943": true,
"link-color--blue-dark__373c0__1mhJo": true,
"link-size--inherit__373c0__2JXk5": true
},
"tag2": {
"val": "DIV"
},
"color": {
"val": "rgb(0, 115, 187)"
},
"class2": {
"lemon--div__373c0__1mboc": true,
"businessName__373c0__1fTgn": true,
"border-color--default__373c0__2oFDT": true
},
"classes3": {
"val": "lemon--div__373c0__1mboc border-color--default__373c0__2oFDT"
},
"classes2": {
"val": "lemon--div__373c0__1mboc businessName__373c0__1fTgn border-color--default__373c0__2oFDT"
},
"tag1": {
"val": "H3"
},
"id3": {
"val": ""
},
"classes1": {
"val": "lemon--h3__373c0__sQmiG heading--h3__373c0__1n4Of alternate__373c0__1uacp"
},
"class3": {
"lemon--div__373c0__1mboc": true,
"border-color--default__373c0__2oFDT": true
},
"id2": {
"val": ""
},
"childrenLen": {
"val": 0
},
"class1": {
"lemon--h3__373c0__sQmiG": true,
"heading--h3__373c0__1n4Of": true,
"alternate__373c0__1uacp": true
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"tag3": {
"val": "DIV"
},
"id1": {
"val": ""
},
"classes": {
"val": "lemon--a__373c0__IEZFH link__373c0__29943 link-color--blue-dark__373c0__1mhJo link-size--inherit__373c0__2JXk5"
},
"tag": {
"val": "A"
},
"id": {
"val": ""
},
"_tolerance": {
"val": 0.044
}
}
Categories
{
"class2": {
"biz-main-info": true,
"embossed-text-white": true
},
"visible": {
"val": true
},
"class3": {
"biz-page-header-left": true,
"claim-status": true
},
"class": {
"category-str-list": true
},
"classes": {
"val": "category-str-list"
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": "biz-page-header-left claim-status"
},
"tag2": {
"val": "DIV"
},
"class1": {
"price-category": true
},
"color": {
"val": "rgb(51, 51, 51)"
},
"classes2": {
"val": "biz-main-info embossed-text-white"
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"classes1": {
"val": "price-category"
},
"tag": {
"val": "SPAN"
},
"tag3": {
"val": "DIV"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
ClaimedStatus
{
"class2": {
"u-inline-block": true
},
"visible": {
"val": true
},
"class": {
"u-nowrap": true,
"claim-status_teaser": true,
"js-claim-status-hover": true
},
"classes": {
"val": "u-nowrap claim-status_teaser js-claim-status-hover"
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"class1": {
"u-inline-block": true
},
"color": {
"val": "rgb(51, 51, 51)"
},
"classes2": {
"val": "u-inline-block"
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 1
},
"classes1": {
"val": "u-inline-block"
},
"tag": {
"val": "DIV"
},
"tag3": {
"val": "DIV"
},
"text": {
"val": "Claimed"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
CrossStreets
{
"class2": {
"u-relative": true
},
"visible": {
"val": true
},
"class": {
"cross-streets": true
},
"classes": {
"val": "cross-streets"
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": ""
},
"tag2": {
"val": "LI"
},
"class1": {
"map-box-address": true,
"u-space-l4": true
},
"color": {
"val": "rgb(51, 51, 51)"
},
"classes2": {
"val": "u-relative"
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "map-box-address u-space-l4"
},
"tag": {
"val": "SPAN"
},
"tag3": {
"val": "UL"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
FullMenu
{
"classes2": {
"val": "iconed-list-story js-add-url-tagging"
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"class2": {
"iconed-list-story": true,
"js-add-url-tagging": true
},
"classes1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"visible": {
"val": true
},
"tag1": {
"val": "B"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"tag": {
"val": "A"
},
"classes3": {
"val": "menu-link-block iconed-list-item"
},
"tag3": {
"val": "LI"
},
"color": {
"val": "rgb(0, 115, 187)"
},
"class3": {
"menu-link-block": true,
"iconed-list-item": true
},
"_tolerance": {
"val": 0.044
}
}
HealthScore
{
"prevText": {
"val": "Health Score "
},
"classes2": {
"val": "health-score-info"
},
"childrenLen": {
"val": 0
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"class2": {
"health-score-info": true
},
"classes1": {
"val": "short-def-list"
},
"tag2": {
"val": "DIV"
},
"visible": {
"val": true
},
"tag1": {
"val": "DL"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"classes": {
"val": "nowrap health-score-description"
},
"tag": {
"val": "DD"
},
"class1": {
"short-def-list": true
},
"class": {
"nowrap": true,
"health-score-description": true
},
"classes3": {
"val": "iconed-list-story"
},
"tag3": {
"val": "DIV"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"class3": {
"iconed-list-story": true
},
"_tolerance": {
"val": 0.044
}
}
Hours
{
"classes2": {
"val": ""
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes1": {
"val": ""
},
"tag2": {
"val": "TBODY"
},
"visible": {
"val": true
},
"colIndex": {
"val": 1
},
"tag1": {
"val": "TR"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"classes": {
"val": ""
},
"tag": {
"val": "TD"
},
"classes3": {
"val": "table table-simple hours-table"
},
"tag3": {
"val": "TABLE"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"class3": {
"table": true,
"table-simple": true,
"hours-table": true
},
"_tolerance": {
"val": 0.044
}
}
LocationInput
{
"visible": {
"val": true
},
"class": {
"pseudo-input_field": true,
"business-search-form_input-field": true
},
"tag2": {
"val": "DIV"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"text": {
"val": ""
},
"class2": {
"pseudo-input_wrapper": true
},
"classes3": {
"val": "pseudo-input business-search-form_input business-search-form_input--near"
},
"classes2": {
"val": "pseudo-input_wrapper"
},
"tag1": {
"val": "SPAN"
},
"id3": {
"val": ""
},
"classes1": {
"val": "pseudo-input_field-holder"
},
"class3": {
"pseudo-input": true,
"business-search-form_input": true,
"business-search-form_input--near": true
},
"id2": {
"val": ""
},
"childrenLen": {
"val": 0
},
"class1": {
"pseudo-input_field-holder": true
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"tag3": {
"val": "LABEL"
},
"id1": {
"val": ""
},
"classes": {
"val": "pseudo-input_field business-search-form_input-field"
},
"tag": {
"val": "INPUT"
},
"id": {
"val": "dropperText_Mast"
},
"_tolerance": {
"val": 0.044
}
}
MoreBusinessInfo
{
"classes2": {
"val": ""
},
"childrenLen": {
"val": 2
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes1": {
"val": "short-def-list"
},
"tag2": {
"val": "LI"
},
"visible": {
"val": true
},
"tag1": {
"val": "DIV"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"classes": {
"val": ""
},
"tag": {
"val": "DL"
},
"class1": {
"short-def-list": true
},
"classes3": {
"val": "ylist"
},
"tag3": {
"val": "UL"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"class3": {
"ylist": true
},
"_tolerance": {
"val": 0.044
}
}
Name
{
"isName": {
"val": true
},
"classes2": {
"val": "biz-page-header clearfix"
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"class2": {
"biz-page-header": true,
"clearfix": true
},
"classes1": {
"val": "biz-page-header-left claim-status"
},
"tag2": {
"val": "DIV"
},
"visible": {
"val": true
},
"tag1": {
"val": "DIV"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"tag": {
"val": "DIV"
},
"class1": {
"biz-page-header-left": true,
"claim-status": true
},
"classes3": {
"val": "content-container js-biz-details"
},
"tag3": {
"val": "DIV"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"class3": {
"content-container": true,
"js-biz-details": true
},
"_tolerance": {
"val": 0.044
}
}
Neighborhood
{
"class2": {
"u-relative": true
},
"visible": {
"val": true
},
"prevText": {
"val": ""
},
"class": {
"neighborhood-str-list": true
},
"classes": {
"val": "neighborhood-str-list"
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": ""
},
"tag2": {
"val": "LI"
},
"class1": {
"map-box-address": true,
"u-space-l4": true
},
"color": {
"val": "rgb(51, 51, 51)"
},
"classes2": {
"val": "u-relative"
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "map-box-address u-space-l4"
},
"tag": {
"val": "SPAN"
},
"tag3": {
"val": "UL"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
NextButton
{
"visible": {
"val": true
},
"class": {
"lemon--a__373c0__IEZFH": true,
"link__373c0__29943": true,
"next-link": true,
"navigation-button__373c0__1D3Ug": true,
"link-color--blue-dark__373c0__1mhJo": true,
"link-size--default__373c0__1skgq": true
},
"tag2": {
"val": "DIV"
},
"color": {
"val": "rgb(0, 115, 187)"
},
"text": {
"val": "Next"
},
"class2": {
"lemon--div__373c0__1mboc": true,
"pagination-links__373c0__dhQoP": true,
"border-color--default__373c0__2oFDT": true,
"nowrap__373c0__1_N1j": true
},
"classes3": {
"val": "lemon--div__373c0__1mboc pagination-links-container__373c0__1vHLX border-color--default__373c0__2oFDT"
},
"classes2": {
"val": "lemon--div__373c0__1mboc pagination-links__373c0__dhQoP border-color--default__373c0__2oFDT nowrap__373c0__1_N1j"
},
"tag1": {
"val": "DIV"
},
"id3": {
"val": ""
},
"classes1": {
"val": "lemon--div__373c0__1mboc navigation-button-container__373c0__2sEbf border-color--default__373c0__2oFDT"
},
"class3": {
"lemon--div__373c0__1mboc": true,
"pagination-links-container__373c0__1vHLX": true,
"border-color--default__373c0__2oFDT": true
},
"id2": {
"val": ""
},
"childrenLen": {
"val": 2
},
"class1": {
"lemon--div__373c0__1mboc": true,
"navigation-button-container__373c0__2sEbf": true,
"border-color--default__373c0__2oFDT": true
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"tag3": {
"val": "DIV"
},
"id1": {
"val": ""
},
"classes": {
"val": "lemon--a__373c0__IEZFH link__373c0__29943 next-link navigation-button__373c0__1D3Ug link-color--blue-dark__373c0__1mhJo link-size--default__373c0__1skgq"
},
"tag": {
"val": "A"
},
"id": {
"val": ""
},
"_tolerance": {
"val": 0.044
}
}
Phone
{
"visible": {
"val": true
},
"class3": {
"mapbox-text": true
},
"prevText": {
"val": "Phone number"
},
"class": {
"biz-phone": true
},
"classes": {
"val": "biz-phone"
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": "mapbox-text"
},
"tag2": {
"val": "UL"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"classes2": {
"val": ""
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": ""
},
"tag": {
"val": "SPAN"
},
"tag3": {
"val": "DIV"
},
"tag1": {
"val": "LI"
},
"_tolerance": {
"val": 0.044
}
}
PriceRange
{
"prevText": {
"val": "Price range"
},
"classes2": {
"val": "iconed-list-story"
},
"childrenLen": {
"val": 0
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"class2": {
"iconed-list-story": true
},
"classes1": {
"val": "short-def-list"
},
"tag2": {
"val": "DIV"
},
"visible": {
"val": true
},
"tag1": {
"val": "DL"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"classes": {
"val": "nowrap price-description"
},
"tag": {
"val": "DD"
},
"class1": {
"short-def-list": true
},
"class": {
"nowrap": true,
"price-description": true
},
"classes3": {
"val": "iconed-list-item"
},
"tag3": {
"val": "LI"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"class3": {
"iconed-list-item": true
},
"_tolerance": {
"val": 0.044
}
}
Rating
{
"classes2": {
"val": "rating-info clearfix"
},
"childrenLen": {
"val": 1
},
"id1": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"text": {
"val": ""
},
"class2": {
"rating-info": true,
"clearfix": true
},
"classes1": {
"val": "biz-rating biz-rating-very-large clearfix"
},
"tag2": {
"val": "DIV"
},
"visible": {
"val": true
},
"tag1": {
"val": "DIV"
},
"id": {
"val": ""
},
"id3": {
"val": ""
},
"tag": {
"val": "DIV"
},
"class1": {
"biz-rating": true,
"biz-rating-very-large": true,
"clearfix": true
},
"class": {
"i-stars": true,
"rating-very-large": true
},
"classes3": {
"val": "biz-main-info embossed-text-white"
},
"tag3": {
"val": "DIV"
},
"isName": {
"val": false
},
"color": {
"val": "rgb(51, 51, 51)"
},
"class3": {
"biz-main-info": true,
"embossed-text-white": true
},
"_tolerance": {
"val": 0.044
}
}
ReviewCount
{
"class2": {
"rating-info": true,
"clearfix": true
},
"visible": {
"val": true
},
"class3": {
"biz-main-info": true,
"embossed-text-white": true
},
"prevText": {
"val": ""
},
"class": {
"review-count": true,
"rating-qualifier": true
},
"classes": {
"val": "review-count rating-qualifier"
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": "biz-main-info embossed-text-white"
},
"tag2": {
"val": "DIV"
},
"class1": {
"biz-rating": true,
"biz-rating-very-large": true,
"clearfix": true
},
"color": {
"val": "rgb(102, 102, 102)"
},
"classes2": {
"val": "rating-info clearfix"
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "biz-rating biz-rating-very-large clearfix"
},
"tag": {
"val": "SPAN"
},
"tag3": {
"val": "DIV"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
TermInput
{
"visible": {
"val": true
},
"class": {
"pseudo-input_field": true,
"business-search-form_input-field": true
},
"tag2": {
"val": "DIV"
},
"color": {
"val": "rgb(51, 51, 51)"
},
"text": {
"val": ""
},
"class2": {
"pseudo-input_wrapper": true
},
"classes3": {
"val": "pseudo-input business-search-form_input business-search-form_input--find"
},
"classes2": {
"val": "pseudo-input_wrapper"
},
"tag1": {
"val": "SPAN"
},
"id3": {
"val": ""
},
"classes1": {
"val": "pseudo-input_field-holder"
},
"class3": {
"pseudo-input": true,
"business-search-form_input": true,
"business-search-form_input--find": true
},
"id2": {
"val": ""
},
"prevText": {
"val": ""
},
"childrenLen": {
"val": 0
},
"class1": {
"pseudo-input_field-holder": true
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"tag3": {
"val": "LABEL"
},
"id1": {
"val": ""
},
"tag": {
"val": "INPUT"
},
"id": {
"val": "find_desc"
},
"_tolerance": {
"val": 0.044
}
}
Website
{
"visible": {
"val": true
},
"prevText": {
"val": "Business website"
},
"classes": {
"val": ""
},
"font": {
"val": "\"Helvetica Neue\", Helvetica, Arial, sans-serif"
},
"id2": {
"val": ""
},
"classes3": {
"val": ""
},
"tag2": {
"val": "LI"
},
"class1": {
"biz-website": true,
"js-biz-website": true,
"js-add-url-tagging": true
},
"color": {
"val": "rgb(0, 115, 187)"
},
"classes2": {
"val": ""
},
"id1": {
"val": ""
},
"id3": {
"val": ""
},
"id": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "biz-website js-biz-website js-add-url-tagging"
},
"tag": {
"val": "A"
},
"tag3": {
"val": "UL"
},
"tag1": {
"val": "SPAN"
},
"_tolerance": {
"val": 0.044
}
}
FullMenuLink
return function(element, global) {
try
{
var url = new URL(element.href);
var link = null;
if (url.pathname === '/biz_redir' && (link = url.searchParams.get('url')))
return link;
else
return element.href;
}
catch (e)
{
return null;
}
};
true
false
FullName
return function(element, global) {
return Array.from(element.querySelectorAll('h1')).map(e => e.innerText).join(' ');
};
true
false
HTML
var result = function (element) {
return element.nodeType === 1 ? element.outerHTML : element.nodeValue;
};
result.noCache = false;
return result;
true
true
Link
var result = function (element) {
var upperTag = function (element) {
return element.tagName ? element.tagName.toUpperCase() : element.tagName;
};
var linkOf = function (element) {
return element && element.href && (element.protocol === "http:" || element.protocol === "https:" || element.protocol == "file:" || element.protocol == "ftp:") ? element.href : null;
};
var original = element;
while (element && (!element.tagName || upperTag(element) !== 'A'))
element = element.parentNode;
var result = linkOf(element);
if (!result) {
if (original.children.length == 1) {
var child = original.children[0];
if (upperTag(child) === 'A') {
result = linkOf(child);
if (!result) {
if (child.children.length == 1) {
child = child.children[0];
if (upperTag(child) === 'A')
result = linkOf(child);
}
}
}
}
}
return result;
};
result.noCache = false;
return result;
true
true
Number
var result = function (element) {
var getText = function () {
return element.nodeType === 1 ? element.innerText : element.nodeValue;
};
var regex = /-?(?=[1-9]|0(?!\d))[\d\,]+(\.\d+)?/;
var first = regex.exec(getText(element));
return first && first.length ? first[0] : null;
};
result.noCache = false;
return result;
false
true
OwnText
var result = function (element) {
var text = [].reduce.call(element.childNodes || [], (a, b) => a + (b.nodeType === 3 ? b.textContent : ''), '');
return text.trim();
};
result.noCache = false;
return result;
false
true
Path
var result = function (element) {
return window.___getPath(element);
};
result.noCache = false;
return result;
false
true
PrevText
return function(element, global) {
return element.previousElementSibling.innerText.trim();
};
true
false
Src
var result = function (element) {
return element.src || "";
};
result.noCache = false;
return result;
false
true
Tag
var result = function (element) {
var upperTag = function (element) {
return element.nodeType === 1 ? element.tagName.toUpperCase() : "HS-NODE";
};
return upperTag(element);
};
result.noCache = false;
return result;
false
true
Text
var result = function (element) {
var text = element.nodeType === 1 ? element.innerText : element.nodeValue;
return text ? text.trim() : "";
};
result.noCache = false;
return result;
true
true
Title
return function(element, global) {
return element.getAttribute('title');
};
true
false
URL
var result = function (element) {
return element.ownerDocument.defaultView.location.href;
};
result.noCache = false;
return result;
false
true
Value
var result = function (element) {
return element.value || element.getAttribute('value');
};
result.noCache = false;
return result;
false
true
childrenLen
var result = function (element) {
return { val: element.nodeType === 1 ? element.children.length : 0 };
};
result.score = 0.7; // Default
return result;
false
true
class
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
var result = {};
var list = element.classList;
var len = list.length;
for (var i = 0; i < len; i++)
result[list[i]] = true;
return result;
};
result.score = 0.73;
return result;
false
true
class1
var result = window.___makeRelatedGatherer('class', function (element) {
return element.parentNode;
});
result.score = 0.87;
return result;
false
true
class2
var result = window.___makeRelatedGatherer('class', function (element) {
return element.parentNode.parentNode;
});
result.score = 0.87;
return result;
false
true
class3
var result = window.___makeRelatedGatherer('class', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 0.9;
return result;
false
true
classes
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: typeof element.className === 'string' ? element.className : null };
};
result.score = 0.91;
return result;
false
true
classes1
var result = window.___makeRelatedGatherer('classes', function (element) {
return element.parentNode;
});
result.score = 0.95;
return result;
false
true
classes2
var result = window.___makeRelatedGatherer('classes', function (element) {
return element.parentNode.parentNode;
});
result.score = 0.95;
return result;
false
true
classes3
var result = window.___makeRelatedGatherer('classes', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 0.81;
return result;
false
true
colIndex
var result = function (element) {
var maxUp = 5;
function closestTd(element) {
for (var up = 0; up < maxUp; up++) {
if (!element) return null;
if (/^t[dh]$/i.test(element.nodeName))
return element;
element = element.parentNode;
}
return null;
}
function colSpan(col) {
return parseInt((col && col.nodeType == 1 && /^t[dh]$/i.test(element.nodeName)) ? (col.getAttribute('colSpan') || 1) : 0);
}
function endIndex(element) {
var colPos = colSpan(element);
while (element) {
element = element.previousSibling;
colPos += colSpan(element);
}
return colPos;
}
element = closestTd(element);
if (element)
return { val: endIndex(element.previousSibling) };
else
return {};
};
result.score = 0.7; // Default
return result;
false
true
color
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: window.getComputedStyle(element).color };
};
result.score = 1;
return result;
false
true
font
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: window.getComputedStyle(element)['font-family'] };
};
result.score = 1;
return result;
false
true
header
var result = function header(element) {
var upperTag = function (element) {
return element.tagName ? element.tagName.toUpperCase() : element.tagName;
};
var getColumnIndex = function (e) {
var maxLevels = 3;
while (e && upperTag(e) !== 'TD' && maxLevels > 0) {
e = e.parentElement;
maxLevels--;
}
if (e && upperTag(e) === 'TD') {
var index = 0;
while ((e = e.previousElementSibling)) {
index += e.colSpan || 1;
}
return index;
}
else
return -1;
};
var colIndex = getColumnIndex(element);
if (colIndex !== -1) {
while (element && upperTag(element) !== 'TABLE')
element = element.parentElement;
if (element && upperTag(element) === 'TABLE') {
var tds = element.querySelectorAll('th,td');
var index = 0;
var latest = null;
for (var td of tds) {
if (index > colIndex)
return { val: (latest.innerText || "").trim() };
latest = td;
index += td.colSpan || 1;
}
}
}
return {};
};
result.score = 0.9;
return result;
false
true
id
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: element.id };
};
result.score = 0.98;
return result;
false
true
id1
var result = window.___makeRelatedGatherer('id', function (element) {
return element.parentNode;
});
result.score = 0.91;
return result;
false
true
id2
var result = window.___makeRelatedGatherer('id', function (element) {
return element.parentNode.parentNode;
});
result.score = 0.91;
return result;
false
true
id3
var result = window.___makeRelatedGatherer('id', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 0.88;
return result;
false
true
indexes
var result = function (element) {
function getElementIndex(node) {
var index = 0;
while ((node = node.previousSibling)) {
index++;
}
return index;
}
var result = {};
var level = 0;
var levels = 3;
while (element && level < levels) {
result[level] = getElementIndex(element);
level++;
element = element.parentElement
}
return result;
};
result.score = 0.86;
return result;
false
true
isName
return function(element, global) {
return !!element.querySelector('h1.biz-page-title');
};
true
false
names
var result = function (element) {
function getElementName(node) {
return node.nodeType === 1 ? (node.name || node.getAttribute('name')) : null;
}
var result = {};
var level = 0;
var levels = 3;
while (element && level < levels) {
var name = getElementName(element);
if (name) result[level] = name;
level++;
element = element.parentElement
}
return result;
};
result.score = 0.75;
return result;
false
true
prevText
var result = function (element) {
var maxDepth = 0;
var maxLength = 128;
while (element && !element.previousElementSibling && maxDepth > 0) {
element = element.parentElement;
maxDepth--;
}
if (element && element.previousElementSibling) {
var fullText = element.previousElementSibling.innerText;
if (fullText.length < maxLength)
return { val: fullText };
}
return null;
};
result.score = 0.7; // Default
return result;
true
true
tag
var result = function (element) {
var upperTag = function (element) {
return element.nodeType === 1 ? element.tagName.toUpperCase() : "HS-NODE";
};
return { val: upperTag(element) };
};
result.score = 1;
return result;
false
true
tag1
var result = window.___makeRelatedGatherer('tag', function (element) {
return element.parentNode;
});
result.score = 1;
return result;
false
true
tag2
var result = window.___makeRelatedGatherer('tag', function (element) {
return element.parentNode.parentNode;
});
result.score = 1;
return result;
false
true
tag3
var result = window.___makeRelatedGatherer('tag', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 1;
return result;
false
true
text
var result = function (element) {
if (element.nodeType !== 1)
return null;
if (window.___textTags.has(element.tagName.toUpperCase()))
return null;
var text = element.innerText;
if (text.length > 64)
return null;
return { val: text };
};
result.score = 0.1;
return result;
false
true
visible
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: element.offsetParent !== null };
};
result.score = 1;
return result;
false
true
Concat
url
String
name
String
claimedStatus
String
rating
String
reviewCount
String
categories
String
address
String
crossStreets
String
neighborhood
String
phone
String
website
String
priceRange
String
healthScore
String
fullMenu
String
mondayHours
String
tuesdayHours
String
wednesdayHours
String
thursdayHours
String
fridayHours
String
saturdayHours
String
sundayHours
String
moreBusienssInfo
String
select
`Main`.`url`,
`Main`.`name`,
`Main`.`claimedStatus`,
`Main`.`rating`,
`Main`.`reviewCount`,
`Main`.`categories`,
`Main`.`address`,
`Main`.`crossStreets`,
`Main`.`neighborhood`,
`Main`.`phone`,
`Main`.`website`,
`Main`.`priceRange`,
`Main`.`healthScore`,
`Main`.`fullMenu`,
`Main`.`mondayHours`,
`Main`.`tuesdayHours`,
`Main`.`wednesdayHours`,
`Main`.`thursdayHours`,
`Main`.`fridayHours`,
`Main`.`saturdayHours`,
`Main`.`sundayHours`,
group_concat(`Main.moreBusinessInfo`.`name` || ": " || `Main.moreBusinessInfo`.`value`, x'0d0a') as `moreBusienssInfo`
from `Main`
left join `Main.moreBusinessInfo` on `Main`.`id` = `Main.moreBusinessInfo`.`Main`
group by `Main`.`id`
true
*://*.doubleclick.net/*
*://*.amazon-adsystem.com/*
*://*.google-analytics.com/*
*://*.googlesyndication.com/*
*://*.advertising.com/*
*://*.imrworldwide.com/*
*://*.quantserve.com/*
*://*.googleadservices.com/*
*://*.scorecardresearch.com/*
*://*.idsync.rlcdn.com/*
*://*.d.adroll.com/*
bcdefc37f30610705380a8845c07f9a9
Q8ddiwpGdl2g17AfNbsSox54+EIQn657zp4DkImSPpRein9c6h0aczbdff21t4IiK0bpsECXieVgUs+JnEMe9Gf23u7h6C+8o+0pAEf7q3aH2y6wRtexCAqCphV6WgzMDMsGEdUbrg4K0y/VuyXM5mIfZ14bAa7T1Iu/DJIi//aPkq72Qa0fW3AsCCKb7+S8fOvV9ex5VR1CYnEbd1Na8KhpwaphCCw4OhXTOuGQ2TzgD3V5ZuDXykY5duI63oO9X+1akvz1YmWYEtrty46+88YIAcVF92QEmyLu3Q7cxTWA5nDrSihupPjX6Ynvc0IL+fs6EvIjCleLiuPBUGe9SQ==