libcraigscrape 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -3
- data/Gemfile +3 -1
- data/lib/listings.rb +17 -3
- data/lib/posting.rb +39 -8
- data/spec/assets/posting_hil_cto_011913.html +163 -0
- data/spec/assets/posting_hil_cto_012012.html +143 -0
- data/spec/listings_spec.rb +12 -0
- data/spec/postings_spec.rb +63 -0
- data/spec/spec_helper.rb +2 -2
- data/test/test_craigslist_listing.rb +26 -21
- metadata +221 -213
data/CHANGELOG
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
== Change Log
|
2
2
|
|
3
|
-
=== Release 1.1
|
3
|
+
=== Release 1.1.1 (January 20, 2013)
|
4
|
+
- A new posting format showed up(posting_hil_cto_011913.html), added to specs and wrote handling code
|
5
|
+
- Fixed a bug affecting the parsing of dates on some postings
|
6
|
+
- Listing specs were failing due to the year change, resolved, and added a timecop dependency to development
|
7
|
+
|
8
|
+
=== Release 1.1 (December 25, 2012)
|
4
9
|
- ruby 1.9.3 support
|
5
10
|
- migrated from rails 2 gems to rails 3
|
6
11
|
- Replaced Net:Http with typhoeus
|
@@ -11,10 +16,10 @@ default timezone in your reports.
|
|
11
16
|
- added support for enable_starttls_auto and tls in craigwatch (Thanks olek!)
|
12
17
|
- added erb evaluation support to the craigwatch definition file (Thanks olek!)
|
13
18
|
|
14
|
-
=== Release 1.0
|
19
|
+
=== Release 1.0 (February 13, 2011)
|
15
20
|
- Replaced hpricot dependency with Nokogiri. Nokogiri should be faster and more reliable. Whoo-hoo!
|
16
21
|
|
17
|
-
=== Release 0.9.1
|
22
|
+
=== Release 0.9.1 (January 5, 2011)
|
18
23
|
- Added support for posting_has_expired? and expired post recognition
|
19
24
|
- Fixed a weird bug in craigwatch that would cause a scrape to abort if a flagged_for_removal? was encountered when using certain (minimal) filtering
|
20
25
|
|
data/Gemfile
CHANGED
@@ -4,9 +4,11 @@ gem 'htmlentities', '~>4.3'
|
|
4
4
|
gem 'nokogiri', '>= 1.4.4'
|
5
5
|
gem 'activerecord', '~>3.2.9'
|
6
6
|
gem 'activesupport', '~>3.2.9'
|
7
|
-
gem 'rspec'
|
8
7
|
gem 'kwalify', '~>0.7'
|
9
8
|
gem 'actionmailer', '~>3.2.9'
|
10
9
|
gem 'sqlite3', '~>1.3'
|
11
10
|
gem 'typhoeus', '~>0.5'
|
12
11
|
gem 'money', '~>5.0.0'
|
12
|
+
|
13
|
+
gem 'timecop', '~>0.5.9'
|
14
|
+
gem 'rspec', '~>2.12.0'
|
data/lib/listings.rb
CHANGED
@@ -53,7 +53,7 @@ class CraigScrape::Listings < CraigScrape::Scraper
|
|
53
53
|
# Let's make sense of the h4 tag, and then read all the p tags below it
|
54
54
|
if HEADER_DATE.match he_decode(el.inner_html)
|
55
55
|
# Generally, the H4 tags contain valid dates. When they do - this is easy:
|
56
|
-
current_date =
|
56
|
+
current_date = most_recent_date $1, $2
|
57
57
|
elsif html.at('h4:last-of-type') == el
|
58
58
|
# There's a specific bug in craigslist, where these nonsense h4's just appear without anything relevant inside them.
|
59
59
|
# They're safe to ignore if they're not the last h4 on the page. I fthey're the last h4 on the page,
|
@@ -176,11 +176,11 @@ class CraigScrape::Listings < CraigScrape::Scraper
|
|
176
176
|
if p_element.at_xpath(XPATH_POST_DATE)
|
177
177
|
# Post 12/3
|
178
178
|
if /\A([^ ]+) ([\d]+)\Z/.match p_element.at_xpath(XPATH_POST_DATE).content.strip
|
179
|
-
ret[:post_date] =
|
179
|
+
ret[:post_date] = most_recent_date $1, $2
|
180
180
|
end
|
181
181
|
elsif SUMMARY_DATE.match he_decode(p_element.children[0])
|
182
182
|
# Old style
|
183
|
-
ret[:post_date] =
|
183
|
+
ret[:post_date] = most_recent_date $1, $2
|
184
184
|
end
|
185
185
|
|
186
186
|
if title_anchor
|
@@ -193,4 +193,18 @@ class CraigScrape::Listings < CraigScrape::Scraper
|
|
193
193
|
ret
|
194
194
|
end
|
195
195
|
|
196
|
+
private
|
197
|
+
|
198
|
+
# This method takes a month & day, and returns the most recent Date in the
|
199
|
+
# past for this date.
|
200
|
+
def most_recent_date(month, day)
|
201
|
+
now = Time.now.utc
|
202
|
+
|
203
|
+
# This ensures we always generate a time in the past, by guessing the year
|
204
|
+
# and subtracting one if we guessed wrong
|
205
|
+
ret = Date.parse [month, day, now.year].join('/')
|
206
|
+
ret = Date.parse [month, day, now.year-1].join('/') if ret > now.to_date
|
207
|
+
|
208
|
+
ret
|
209
|
+
end
|
196
210
|
end
|
data/lib/posting.rb
CHANGED
@@ -15,7 +15,7 @@ class CraigScrape::Posting < CraigScrape::Scraper
|
|
15
15
|
POST_DATE = /Date:[^\d]*((?:[\d]{2}|[\d]{4})\-[\d]{1,2}\-[\d]{1,2}[^\d]+[\d]{1,2}\:[\d]{1,2}[ ]*[AP]M[^a-z]+[a-z]+)/i
|
16
16
|
LOCATION = /Location\:[ ]+(.+)/
|
17
17
|
HEADER_LOCATION = /\((.+)\)$/
|
18
|
-
POSTING_ID = /
|
18
|
+
POSTING_ID = /Posting[ ]?ID\:[ ]*([\d]+)/
|
19
19
|
REPLY_TO = /(.+)/
|
20
20
|
PRICE = /((?:^\$[\d]+(?:\.[\d]{2})?)|(?:\$[\d]+(?:\.[\d]{2})?$))/
|
21
21
|
|
@@ -29,9 +29,19 @@ class CraigScrape::Posting < CraigScrape::Scraper
|
|
29
29
|
REQUIRED_FIELDS = %w(contents posting_id post_time header title full_section)
|
30
30
|
|
31
31
|
XPATH_USERBODY = "//*[@id='userbody']"
|
32
|
+
XPATH_POSTINGBODY = "//*[@id='postingbody']"
|
33
|
+
|
32
34
|
XPATH_BLURBS = "//ul[@class='blurbs']"
|
33
|
-
XPATH_PICS = "//*[@class='tn']/a/@href"
|
34
|
-
|
35
|
+
XPATH_PICS = ["//*[@class='tn']/a/@href",
|
36
|
+
# For some posts (the newest ones on 01/20/12) we find the images:
|
37
|
+
"//*[@id='thumbs']/a/@href"
|
38
|
+
].join('|')
|
39
|
+
XPATH_REPLY_TO = ["//*[@class='dateReplyBar']/small/a",
|
40
|
+
# For some posts (the newest ones on 01/20/12) we find the reply to this way:
|
41
|
+
"//*[@class='dateReplyBar']/*[@id='replytext']/following-sibling::a"
|
42
|
+
].join('|')
|
43
|
+
XPATH_POSTINGBLOCK = "//*[@class='postingidtext' or @class='postinginfos']"
|
44
|
+
XPATH_POSTED_DATE = "//*[@class='postinginfos']/*[@class='postinginfo']/date"
|
35
45
|
|
36
46
|
# This is really just for testing, in production use, uri.path is a better solution
|
37
47
|
attr_reader :href #:nodoc:
|
@@ -81,6 +91,10 @@ class CraigScrape::Posting < CraigScrape::Scraper
|
|
81
91
|
(html_head / "*[@class='bchead']//a").each do |a|
|
82
92
|
@full_section << he_decode(a.inner_html) unless a['id'] and a['id'] == 'ef'
|
83
93
|
end if html_head
|
94
|
+
|
95
|
+
# For some posts (the newest ones on 01/20/12) craigslist is pre-pending
|
96
|
+
# a silly "CL" to the section. Let's strip that:
|
97
|
+
@full_section.delete_at(0) if @full_section[0] == 'CL'
|
84
98
|
end
|
85
99
|
|
86
100
|
@full_section
|
@@ -104,9 +118,16 @@ class CraigScrape::Posting < CraigScrape::Scraper
|
|
104
118
|
# Time, reflects the full timestamp of the posting
|
105
119
|
def post_time
|
106
120
|
unless @post_time
|
107
|
-
|
108
|
-
|
109
|
-
|
121
|
+
if html.at_xpath(XPATH_POSTED_DATE)
|
122
|
+
# For some posts (the newest ones on 01/20/12) craigslist made this really
|
123
|
+
# easy for us.
|
124
|
+
@post_time = DateTime.parse(html.at_xpath(XPATH_POSTED_DATE))
|
125
|
+
else
|
126
|
+
# The bulk of the post time/dates are parsed via a simple regex:
|
127
|
+
cursor = html_head.at 'hr' if html_head
|
128
|
+
cursor = cursor.next until cursor.nil? or POST_DATE.match cursor.to_s
|
129
|
+
@post_time = DateTime.parse($1) if $1
|
130
|
+
end
|
110
131
|
end
|
111
132
|
|
112
133
|
@post_time
|
@@ -124,7 +145,7 @@ class CraigScrape::Posting < CraigScrape::Scraper
|
|
124
145
|
@posting_id = $1.to_i if POSTING_ID.match html_footer.to_s
|
125
146
|
else
|
126
147
|
# Post 12/3
|
127
|
-
@posting_id = $1.to_i if POSTING_ID.match html.xpath(
|
148
|
+
@posting_id = $1.to_i if POSTING_ID.match html.xpath(XPATH_POSTINGBLOCK).to_s
|
128
149
|
end
|
129
150
|
|
130
151
|
@posting_id
|
@@ -133,7 +154,17 @@ class CraigScrape::Posting < CraigScrape::Scraper
|
|
133
154
|
# String, The full-html contents of the post
|
134
155
|
def contents
|
135
156
|
unless @contents
|
136
|
-
@contents =
|
157
|
+
@contents = if html.at_xpath(XPATH_POSTINGBODY)
|
158
|
+
# For some posts (the newest ones on 01/20/12) craigslist made this really
|
159
|
+
# easy for us.
|
160
|
+
html.at_xpath(XPATH_POSTINGBODY).children.to_s
|
161
|
+
elsif html_source
|
162
|
+
# Otherwise we have to parse this in a convoluted way from the userbody
|
163
|
+
# section:
|
164
|
+
user_body
|
165
|
+
end
|
166
|
+
|
167
|
+
# This helps clean up the whitespace around the sides, in case we got any:
|
137
168
|
@contents = he_decode(@contents).strip if @contents
|
138
169
|
end
|
139
170
|
|
@@ -0,0 +1,163 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>2 dr Chevy on 30s fs/trade donk - $20 (Any)</title>
|
5
|
+
<meta name="robots" content="NOARCHIVE,NOFOLLOW">
|
6
|
+
<meta name="viewport" content="user-scalable=1;">
|
7
|
+
<link type="text/css" rel="stylesheet" media="all" href="http://www.craigslist.org/styles/clnew.css?v=119f539293f850705f1debff3effaa21">
|
8
|
+
|
9
|
+
<!--[if lt IE 9]>
|
10
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/html5shiv.js?v=ed7af45dcbda983c8455631037ebcdda"></script>
|
11
|
+
<![endif]-->
|
12
|
+
</head>
|
13
|
+
|
14
|
+
<body class="posting">
|
15
|
+
|
16
|
+
<article class="container">
|
17
|
+
<header class="bchead">
|
18
|
+
<div class="contents">
|
19
|
+
<a href="http://www.craigslist.org/about/sites">CL</a> > <a href="http://tampa.craigslist.org/">tampa bay</a> > <a href="http://tampa.craigslist.org/hil/">hillsborough co</a> > <a href="http://tampa.craigslist.org/hil/sss/">all for sale / wanted</a> > <a href="http://tampa.craigslist.org/hil/cto/">cars & trucks - by owner</a>
|
20
|
+
</div>
|
21
|
+
</header>
|
22
|
+
|
23
|
+
<section class="body">
|
24
|
+
<section class="dateReplyBar">
|
25
|
+
|
26
|
+
<script type="text/javascript"><!--
|
27
|
+
var isPreview = "";
|
28
|
+
var postingTitle = "2 dr Chevy on 30s fs/trade donk - $20 (Any)";
|
29
|
+
var bestOf = "";
|
30
|
+
var postingURL = "http%3A%2F%2Ftampa.craigslist.org%2Fhil%2Fcto%2F3516252529.html";
|
31
|
+
var displayEmail = "t5kjj-3516252529@sale.craigslist.org";
|
32
|
+
|
33
|
+
--></script>
|
34
|
+
|
35
|
+
|
36
|
+
<button id="reply_button">Reply</button>
|
37
|
+
|
38
|
+
<span id="replytext">Reply to:</span> <a href="mailto:t5kjj-3516252529@sale.craigslist.org?subject=2%20dr%20Chevy%20on%2030s%20fs%2Ftrade%20donk%20-%20%2420%20(Any)%20-%20%2420%20(Any)&body=%0A%0Ahttp%3A%2F%2Ftampa.craigslist.org%2Fhil%2Fcto%2F3516252529.html%0A">t5kjj-3516252529@sale.craigslist.org</a><sup> [<a href="http://www.craigslist.org/about/help/replying_to_posts" target="_blank">?</a>]</sup>
|
39
|
+
|
40
|
+
<div id="returnemail"> </div>
|
41
|
+
|
42
|
+
|
43
|
+
<aside id="flags">
|
44
|
+
<span id="flagChooser" class="tsb">
|
45
|
+
flag <sup>[<a href="http://www.craigslist.org/about/help/flags_and_community_moderation">?</a>]</sup> :
|
46
|
+
<a id="flag16" href="/flag/?flagCode=16&postingID=3516252529"
|
47
|
+
title="Wrong category, wrong site, discusses another post, or otherwise misplaced">
|
48
|
+
miscategorized</a>
|
49
|
+
<a id="flag28" href="/flag/?flagCode=28&postingID=3516252529"
|
50
|
+
title="Violates craigslist Terms Of Use or other posted guidelines">
|
51
|
+
prohibited</a>
|
52
|
+
<a id="flag15" href="/flag/?flagCode=15&postingID=3516252529"
|
53
|
+
title="Posted too frequently, in multiple cities/categories, or is too commercial">
|
54
|
+
spam</a>
|
55
|
+
<a id="flag9" href="/flag/?flagCode=9&postingID=3516252529"
|
56
|
+
title="Should be considered for inclusion in the Best-Of-Craigslist">
|
57
|
+
best of</a>
|
58
|
+
</span>
|
59
|
+
</aside>
|
60
|
+
|
61
|
+
</section>
|
62
|
+
|
63
|
+
<h2 class="postingtitle">2 dr Chevy on 30s fs/trade donk - $20 (Any)</h2>
|
64
|
+
|
65
|
+
<section id="userbody">
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<script type="text/javascript">
|
70
|
+
<!--
|
71
|
+
imgList = ["http://images.craigslist.org/3G53I93Hc5L85Kf5H7d120fddd0157c831762.jpg","http://images.craigslist.org/3F83J73Hb5L75Gb5J2d12f3a7aa165da01cad.jpg","http://images.craigslist.org/3I43m13N85K25Fd5Hed120641f1962feb153b.jpg","http://images.craigslist.org/3Ld3J53H35Gb5Ff5Jfd12984fcb8d2d721dd9.jpg"];
|
72
|
+
// -->
|
73
|
+
</script>
|
74
|
+
<figure class="iw">
|
75
|
+
|
76
|
+
<div id="thumbs">
|
77
|
+
|
78
|
+
<a href="http://images.craigslist.org/3G53I93Hc5L85Kf5H7d120fddd0157c831762.jpg" title="1">
|
79
|
+
<img src="http://images.craigslist.org/thumb/3G53I93Hc5L85Kf5H7d120fddd0157c831762.jpg" alt="image 1">
|
80
|
+
</a>
|
81
|
+
|
82
|
+
<a href="http://images.craigslist.org/3F83J73Hb5L75Gb5J2d12f3a7aa165da01cad.jpg" title="2">
|
83
|
+
<img src="http://images.craigslist.org/thumb/3F83J73Hb5L75Gb5J2d12f3a7aa165da01cad.jpg" alt="image 2">
|
84
|
+
</a>
|
85
|
+
|
86
|
+
<a href="http://images.craigslist.org/3I43m13N85K25Fd5Hed120641f1962feb153b.jpg" title="3">
|
87
|
+
<img src="http://images.craigslist.org/thumb/3I43m13N85K25Fd5Hed120641f1962feb153b.jpg" alt="image 3">
|
88
|
+
</a>
|
89
|
+
|
90
|
+
<a href="http://images.craigslist.org/3Ld3J53H35Gb5Ff5Jfd12984fcb8d2d721dd9.jpg" title="4">
|
91
|
+
<img src="http://images.craigslist.org/thumb/3Ld3J53H35Gb5Ff5Jfd12984fcb8d2d721dd9.jpg" alt="image 4">
|
92
|
+
</a>
|
93
|
+
|
94
|
+
</div>
|
95
|
+
<div id="ci">
|
96
|
+
<img id="iwi" src="http://images.craigslist.org/3G53I93Hc5L85Kf5H7d120fddd0157c831762.jpg" alt="">
|
97
|
+
</div>
|
98
|
+
</figure>
|
99
|
+
|
100
|
+
<section id="postingbody">
|
101
|
+
One of the baddest 2 door chevys u will ever see on the road way way to much to list car is in Paint shop now getting painted house of color real candy red all the way through the car everything on car is brand new from the motor (no other one like it) and to the lift (done by underground rim king) fiberglass digital dash this is a one of a kind only car I have ever seen with a see through hood on it car has everything I want 20,000 cash or close to it but.... I will trade for either one of the following: a tahoe, or pick up,hummer h2,silver ado, Sierra,Dually, range rover,porsche suv,avalanche,magnum,charger,cls 500,745,range rover,infinity of any kind im open just send me a text or email either one is good or a vert!!! I will drive to u or meet u half way o yea and the rims are 30's floaters (786)257-7215 Cj text me<br>
|
102
|
+
<br>
|
103
|
+
<br>
|
104
|
+
<br>
|
105
|
+
<br>
|
106
|
+
Donk,floaters,trade,Chevy,lift,lifted,22,24,26,28,30,32,vert,candy,pearl,ect:
|
107
|
+
</section>
|
108
|
+
<section class="cltags"><!-- START CLTAGS -->
|
109
|
+
<ul class="blurbs">
|
110
|
+
<li> <!-- CLTAG GeographicArea=Any -->Location: Any</li>
|
111
|
+
<li>it's NOT ok to contact this poster with services or other commercial interests</li></ul><!-- END CLTAGS -->
|
112
|
+
</section>
|
113
|
+
<div class="postinginfos">
|
114
|
+
<p class="postinginfo">Posting ID: 3516252529</p>
|
115
|
+
<p class="postinginfo">Posted: <date>2013-01-08, 2:09PM EST</date></p>
|
116
|
+
|
117
|
+
<p class="postinginfo"><a href="https://accounts.craigslist.org/eaf?postingID=3516252529&token=U2FsdGVkX18yOTk2NTI5OU8UM46U_bRTZNEvki7uj1feLDXHsvDa3PzGnpiBdmQ5zhwh4H3WpKobWR7oWCdAeIzotsAemmnT" class="tsb">email to a friend</a></p>
|
118
|
+
</div>
|
119
|
+
</section>
|
120
|
+
|
121
|
+
<aside class="tsb">
|
122
|
+
<p><a href="http://www.craigslist.org/about/scams">Avoid scams, deal locally!</a>
|
123
|
+
|
124
|
+
<em>Do NOT wire funds (Western Union, Moneygram).</em>
|
125
|
+
|
126
|
+
Beware cashier checks, money orders, shipping, non-local buyers/sellers.
|
127
|
+
|
128
|
+
<a href="http://www.craigslist.org/about/scams">More info</a></p>
|
129
|
+
</aside>
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
</section>
|
135
|
+
<footer>
|
136
|
+
<ul class="clfooter">
|
137
|
+
<li>Copyright © 2013 craigslist, inc.</li>
|
138
|
+
<li><a href="http://www.craigslist.org/about/terms.of.use">terms of use</a></li>
|
139
|
+
<li><a href="http://www.craigslist.org/about/privacy_policy">privacy</a></li>
|
140
|
+
<li><a href="/forums/?forumID=8">feedback</a></li>
|
141
|
+
</ul>
|
142
|
+
</footer>
|
143
|
+
|
144
|
+
</article>
|
145
|
+
|
146
|
+
|
147
|
+
<script type="text/javascript"><!--
|
148
|
+
var pagetype = "posting";
|
149
|
+
var pID = "3516252529";
|
150
|
+
var wwwurl = "http://www.craigslist.org";
|
151
|
+
|
152
|
+
--></script>
|
153
|
+
|
154
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/jquery-1.7.2.js?v=89700834f1601ac3ebc3e5fb3302c040"></script>
|
155
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/postings.js?v=6c6be350266b68cc30281042524287ee"></script>
|
156
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/formats.js?v=c6b5dd14b3181897a51f2136efcfacaf"></script>
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
</body>
|
162
|
+
</html>
|
163
|
+
|
@@ -0,0 +1,143 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>2002 Jaguar X-Type 90,000 miles - $4900 (Tampa/Brandon)</title>
|
5
|
+
<meta name="robots" content="NOARCHIVE,NOFOLLOW">
|
6
|
+
<meta name="viewport" content="user-scalable=1;">
|
7
|
+
<link type="text/css" rel="stylesheet" media="all" href="http://www.craigslist.org/styles/clnew.css?v=119f539293f850705f1debff3effaa21">
|
8
|
+
|
9
|
+
<!--[if lt IE 9]>
|
10
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/html5shiv.js?v=ed7af45dcbda983c8455631037ebcdda"></script>
|
11
|
+
<![endif]-->
|
12
|
+
</head>
|
13
|
+
|
14
|
+
<body class="posting">
|
15
|
+
|
16
|
+
<article class="container">
|
17
|
+
<header class="bchead">
|
18
|
+
<div class="contents">
|
19
|
+
<a href="http://www.craigslist.org/about/sites">CL</a> > <a href="http://tampa.craigslist.org/">tampa bay</a> > <a href="http://tampa.craigslist.org/hil/">hillsborough co</a> > <a href="http://tampa.craigslist.org/hil/sss/">all for sale / wanted</a> > <a href="http://tampa.craigslist.org/hil/cto/">cars & trucks - by owner</a>
|
20
|
+
</div>
|
21
|
+
</header>
|
22
|
+
|
23
|
+
<section class="body">
|
24
|
+
<section class="dateReplyBar">
|
25
|
+
|
26
|
+
<script type="text/javascript"><!--
|
27
|
+
var isPreview = "";
|
28
|
+
var postingTitle = "2002 Jaguar X-Type 90,000 miles - $4900 (Tampa/Brandon)";
|
29
|
+
var bestOf = "";
|
30
|
+
var postingURL = "http%3A%2F%2Ftampa.craigslist.org%2Fhil%2Fcto%2F3559534414.html";
|
31
|
+
var displayEmail = "xxnxb-3559534414@sale.craigslist.org";
|
32
|
+
|
33
|
+
--></script>
|
34
|
+
|
35
|
+
|
36
|
+
<button id="reply_button">Reply</button>
|
37
|
+
|
38
|
+
<span id="replytext">Reply to:</span> <a href="mailto:xxnxb-3559534414@sale.craigslist.org?subject=2002%20Jaguar%20X-Type%2090%2C000%20miles%20-%20%244900%20(Tampa%2FBrandon)%20-%20%244900%20(Tampa%2FBrandon)&body=%0A%0Ahttp%3A%2F%2Ftampa.craigslist.org%2Fhil%2Fcto%2F3559534414.html%0A">xxnxb-3559534414@sale.craigslist.org</a><sup> [<a href="http://www.craigslist.org/about/help/replying_to_posts" target="_blank">?</a>]</sup>
|
39
|
+
|
40
|
+
<div id="returnemail"> </div>
|
41
|
+
|
42
|
+
|
43
|
+
<aside id="flags">
|
44
|
+
<span id="flagChooser" class="tsb">
|
45
|
+
flag <sup>[<a href="http://www.craigslist.org/about/help/flags_and_community_moderation">?</a>]</sup> :
|
46
|
+
<a id="flag16" href="/flag/?flagCode=16&postingID=3559534414"
|
47
|
+
title="Wrong category, wrong site, discusses another post, or otherwise misplaced">
|
48
|
+
miscategorized</a>
|
49
|
+
<a id="flag28" href="/flag/?flagCode=28&postingID=3559534414"
|
50
|
+
title="Violates craigslist Terms Of Use or other posted guidelines">
|
51
|
+
prohibited</a>
|
52
|
+
<a id="flag15" href="/flag/?flagCode=15&postingID=3559534414"
|
53
|
+
title="Posted too frequently, in multiple cities/categories, or is too commercial">
|
54
|
+
spam</a>
|
55
|
+
<a id="flag9" href="/flag/?flagCode=9&postingID=3559534414"
|
56
|
+
title="Should be considered for inclusion in the Best-Of-Craigslist">
|
57
|
+
best of</a>
|
58
|
+
</span>
|
59
|
+
</aside>
|
60
|
+
|
61
|
+
</section>
|
62
|
+
|
63
|
+
<h2 class="postingtitle">2002 Jaguar X-Type 90,000 miles - $4900 (Tampa/Brandon)</h2>
|
64
|
+
|
65
|
+
<section id="userbody">
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
<section id="postingbody">
|
71
|
+
2002 Jaguar X-Type, automatick, 90,000 miles, cold ac, grey with black leather, power windows, power seats, power mirrors, power door locks with keyless entry, power sunroof, wood trim and more, looks and runs great. Call 727-439-3027<br>
|
72
|
+
<br>
|
73
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00390_zpsc95bcf98.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00390_zpsc95bcf98.jpg" border="0" alt=" photo DSC00390_zpsc95bcf98.jpg"></a><br>
|
74
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00392_zps1b90d33c.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00392_zps1b90d33c.jpg" border="0" alt=" photo DSC00392_zps1b90d33c.jpg"></a><br>
|
75
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00395_zps0047f176.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00395_zps0047f176.jpg" border="0" alt=" photo DSC00395_zps0047f176.jpg"></a><br>
|
76
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00398-1_zps4b01580d.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00398-1_zps4b01580d.jpg" border="0" alt=" photo DSC00398-1_zps4b01580d.jpg"></a><br>
|
77
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00401-1_zps69e67678.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00401-1_zps69e67678.jpg" border="0" alt=" photo DSC00401-1_zps69e67678.jpg"></a><br>
|
78
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00404_zps1dfd3717.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00404_zps1dfd3717.jpg" border="0" alt=" photo DSC00404_zps1dfd3717.jpg"></a><br>
|
79
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00406_zps370a3ffa.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00406_zps370a3ffa.jpg" border="0" alt=" photo DSC00406_zps370a3ffa.jpg"></a><br>
|
80
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00411_zps8584b52e.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00411_zps8584b52e.jpg" border="0" alt=" photo DSC00411_zps8584b52e.jpg"></a><br>
|
81
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00412_zpsbf6b145b.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00412_zpsbf6b145b.jpg" border="0" alt=" photo DSC00412_zpsbf6b145b.jpg"></a><br>
|
82
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00415_zps0341d9d2.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00415_zps0341d9d2.jpg" border="0" alt=" photo DSC00415_zps0341d9d2.jpg"></a><br>
|
83
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00421_zpsa71182c6.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00421_zpsa71182c6.jpg" border="0" alt=" photo DSC00421_zpsa71182c6.jpg"></a>
|
84
|
+
<a href="http://s730.beta.photobucket.com/user/brianvangelov/media/DSC00417_zpsf5f23e08.jpg.html" target="_blank" rel="nofollow"><img src="http://i730.photobucket.com/albums/ww303/brianvangelov/DSC00417_zpsf5f23e08.jpg" border="0" alt=" photo DSC00417_zpsf5f23e08.jpg"></a>
|
85
|
+
|
86
|
+
|
87
|
+
</section>
|
88
|
+
<section class="cltags"><!-- START CLTAGS -->
|
89
|
+
<ul class="blurbs">
|
90
|
+
<li> <!-- CLTAG GeographicArea=Tampa/Brandon -->Location: Tampa/Brandon</li>
|
91
|
+
<li>it's NOT ok to contact this poster with services or other commercial interests</li></ul><!-- END CLTAGS -->
|
92
|
+
</section>
|
93
|
+
<div class="postinginfos">
|
94
|
+
<p class="postinginfo">Posting ID: 3559534414</p>
|
95
|
+
<p class="postinginfo">Posted: <date>2013-01-20, 4:24PM EST</date></p>
|
96
|
+
<p class="postinginfo">Edited: <date>2013-01-20, 4:29PM EST</date></p>
|
97
|
+
<p class="postinginfo"><a href="https://accounts.craigslist.org/eaf?postingID=3559534414&token=U2FsdGVkX185MzkxOTM5MVHhcYWkNEGOrpcgNp5LTCIMLn1P89eQPunu8KznqIaCbpbs6a8EjVA9h6W0UxpQTYZTx0fy1BIt" class="tsb">email to a friend</a></p>
|
98
|
+
</div>
|
99
|
+
</section>
|
100
|
+
|
101
|
+
<aside class="tsb">
|
102
|
+
<p><a href="http://www.craigslist.org/about/scams">Avoid scams, deal locally!</a>
|
103
|
+
|
104
|
+
<em>Do NOT wire funds (Western Union, Moneygram).</em>
|
105
|
+
|
106
|
+
Beware cashier checks, money orders, shipping, non-local buyers/sellers.
|
107
|
+
|
108
|
+
<a href="http://www.craigslist.org/about/scams">More info</a></p>
|
109
|
+
</aside>
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
</section>
|
115
|
+
<footer>
|
116
|
+
<ul class="clfooter">
|
117
|
+
<li>Copyright © 2013 craigslist, inc.</li>
|
118
|
+
<li><a href="http://www.craigslist.org/about/terms.of.use">terms of use</a></li>
|
119
|
+
<li><a href="http://www.craigslist.org/about/privacy_policy">privacy</a></li>
|
120
|
+
<li><a href="/forums/?forumID=8">feedback</a></li>
|
121
|
+
</ul>
|
122
|
+
</footer>
|
123
|
+
|
124
|
+
</article>
|
125
|
+
|
126
|
+
|
127
|
+
<script type="text/javascript"><!--
|
128
|
+
var pagetype = "posting";
|
129
|
+
var pID = "3559534414";
|
130
|
+
var wwwurl = "http://www.craigslist.org";
|
131
|
+
|
132
|
+
--></script>
|
133
|
+
|
134
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/jquery-1.7.2.js?v=89700834f1601ac3ebc3e5fb3302c040"></script>
|
135
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/postings.js?v=6c6be350266b68cc30281042524287ee"></script>
|
136
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/formats.js?v=c6b5dd14b3181897a51f2136efcfacaf"></script>
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
</body>
|
142
|
+
</html>
|
143
|
+
|