This commit is contained in:
2025-11-28 14:43:58 +01:00
parent 836ce3527f
commit 7fa3e4a545
10 changed files with 664 additions and 396 deletions

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourcePerFileMappings">
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/9ac1bd58-f7d6-4a86-a165-f0a24a2b7cb9/console.sql" value="9ac1bd58-f7d6-4a86-a165-f0a24a2b7cb9" />
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/9cb4e997-fbca-4426-9093-d308871c5d5e/console.sql" value="9cb4e997-fbca-4426-9093-d308871c5d5e" />
</component>
</project>

1
.idea/vcs.xml generated
View File

@@ -2,5 +2,6 @@
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/Auction" vcs="Git" />
</component>
</project>

BIN
cache/page_cache.db vendored

Binary file not shown.

View File

@@ -78,6 +78,11 @@
<version>5.10.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-all</artifactId>
<version>0.64.8</version>
</dependency>
</dependencies>
<build>

View File

@@ -12,7 +12,6 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import static org.junit.jupiter.api.Assertions.*;
@@ -27,40 +26,40 @@ public class AuctionParsingTest {
@BeforeAll
public static void loadTestHtml() throws IOException {
// Load the test HTML file
testHtml = Files.readString(Paths.get("src/test/resources/test.html"));
testHtml = Files.readString(Paths.get("src/test/resources/test_auctions.html"));
System.out.println("Loaded test HTML (" + testHtml.length() + " characters)");
}
@Test
public void testParseAuctionsFromTestHtml() {
// Parse the HTML with JSoup
var doc = Jsoup.parse(testHtml);
Document doc = Jsoup.parse(testHtml);
// Find all auction links
var auctionLinks = doc.select("a[href^='/a/']");
Elements auctionLinks = doc.select("a[href^='/a/']");
System.out.println("\n=== Auction Parsing Test ===");
System.out.println("Found " + auctionLinks.size() + " auction links");
List<TroostwijkScraper.AuctionInfo> auctions = new ArrayList<>();
var count = 0;
int count = 0;
for (var link : auctionLinks) {
var href = link.attr("href");
for (Element link : auctionLinks) {
String href = link.attr("href");
// Extract auction ID from URL
var pattern = Pattern.compile("/a/.*?-A([17])-(\\d+)");
var matcher = pattern.matcher(href);
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("/a/.*?-A([17])-(\\d+)");
java.util.regex.Matcher matcher = pattern.matcher(href);
if (!matcher.find()) {
continue;
}
var typeNum = matcher.group(1);
var auctionId = Integer.parseInt(matcher.group(2));
String typeNum = matcher.group(1);
int auctionId = Integer.parseInt(matcher.group(2));
// Extract auction info using IMPROVED text-based method
var auction = extractAuctionInfoFromText(link, href, auctionId, "A" + typeNum);
TroostwijkScraper.AuctionInfo auction = extractAuctionInfoFromText(link, href, auctionId, "A" + typeNum);
auctions.add(auction);
// Print the first 10 auctions for verification
@@ -87,10 +86,10 @@ public class AuctionParsingTest {
System.out.println("Total auctions parsed: " + auctions.size());
// Count by country
var nlCount = auctions.stream().filter(a -> "NL".equals(a.country)).count();
var bgCount = auctions.stream().filter(a -> "BG".equals(a.country)).count();
var deCount = auctions.stream().filter(a -> "DE".equals(a.country)).count();
var beCount = auctions.stream().filter(a -> "BE".equals(a.country)).count();
long nlCount = auctions.stream().filter(a -> "NL".equals(a.country)).count();
long bgCount = auctions.stream().filter(a -> "BG".equals(a.country)).count();
long deCount = auctions.stream().filter(a -> "DE".equals(a.country)).count();
long beCount = auctions.stream().filter(a -> "BE".equals(a.country)).count();
System.out.println("Dutch (NL) auctions: " + nlCount);
System.out.println("Bulgarian (BG) auctions: " + bgCount);
@@ -102,171 +101,95 @@ public class AuctionParsingTest {
assertTrue(auctions.size() > 0, "Should find at least one auction");
// Verify all auctions have basic info
for (var auction : auctions) {
for (TroostwijkScraper.AuctionInfo auction : auctions) {
assertNotNull(auction.title, "Title should not be null for auction " + auction.auctionId);
assertTrue(auction.title.length() > 0, "Title should not be empty for auction " + auction.auctionId);
assertNotNull(auction.url, "URL should not be null for auction " + auction.auctionId);
assertTrue(auction.auctionId > 0, "Auction ID should be positive");
assertNotNull(auction.location, "Location should not be null for auction " + auction.auctionId);
assertNotNull(auction.country, "Country should not be null for auction " + auction.auctionId);
assertTrue(auction.lotCount > 0, "Lot count should be positive for auction " + auction.auctionId);
}
}
/**
* Helper method to extract auction info from a link element
* This is a copy of the logic from TroostwijkScraper for testing purposes
*/
private TroostwijkScraper.AuctionInfo extractAuctionInfo(Element link, String href, int auctionId, String type) {
var auction = new TroostwijkScraper.AuctionInfo();
auction.auctionId = auctionId;
auction.type = type;
auction.url = "https://www.troostwijkauctions.com" + href;
// Extract title from href (convert kebab-case to title)
var titlePattern = Pattern.compile("/a/(.+?)-A[17]-");
var titleMatcher = titlePattern.matcher(href);
if (titleMatcher.find()) {
var slug = titleMatcher.group(1);
auction.title = slug.replace("-", " ");
// Capitalize first letter
if (!auction.title.isEmpty()) {
auction.title = auction.title.substring(0, 1).toUpperCase() + auction.title.substring(1);
}
} else {
auction.title = "Unknown Auction";
}
// Try to find title in link text (more accurate)
var linkText = link.text();
if (!linkText.isEmpty() && !linkText.matches(".*\\d+.*")) {
// If link text doesn't contain numbers, it's likely the title
var parts = linkText.split(",|\\d+");
if (parts.length > 0 && parts[0].trim().length() > 5) {
auction.title = parts[0].trim();
}
}
// Extract location using JSoup selectors
// Look for <p> tags that contain location info
var locationElements = link.select("p");
for (var p : locationElements) {
var text = p.text();
// Pattern: "City, Country" or "City, Region, Country"
if (text.matches(".*[A-Z]{2}$")) {
// Ends with 2-letter country code
var countryCode = text.substring(text.length() - 2);
var cityPart = text.substring(0, text.length() - 2).trim();
// Remove trailing comma or whitespace
cityPart = cityPart.replaceAll("[,\\s]+$", "");
auction.country = countryCode;
auction.city = cityPart;
auction.location = cityPart + ", " + countryCode;
break;
}
}
// Fallback: check HTML content directly
if (auction.country == null) {
var html = link.html();
var locPattern = Pattern.compile(
"([A-Za-z][A-Za-z\\s,\\-']+?)\\s*(?:<!--.*?-->)?\\s*</span>\\s*([A-Z]{2})(?![A-Za-z])");
var locMatcher = locPattern.matcher(html);
if (locMatcher.find()) {
var city = locMatcher.group(1).trim().replaceAll(",$", "");
var country = locMatcher.group(2);
auction.city = city;
auction.country = country;
auction.location = city + ", " + country;
}
}
// Extract lot count if available (kavels/lots)
var textElements = link.select("*");
for (var elem : textElements) {
var text = elem.ownText();
if (text.matches("\\d+\\s+(?:kavel|lot|item)s?.*")) {
var countPattern = Pattern.compile("(\\d+)");
var countMatcher = countPattern.matcher(text);
if (countMatcher.find()) {
auction.lotCount = Integer.parseInt(countMatcher.group(1));
break;
}
}
}
return auction;
}
/**
* IMPROVED: Extract auction info using .text() method
* This parses the human-readable text instead of HTML markup
*
* Expected format: "[day] om [time] [lot_count] [title] [city], [CC]"
* Example: "woensdag om 18:00 1 Vrachtwagens voor bedrijfsvoertuigen Loßburg, DE"
*/
private TroostwijkScraper.AuctionInfo extractAuctionInfoFromText(Element link, String href, int auctionId, String type) {
var auction = new TroostwijkScraper.AuctionInfo();
TroostwijkScraper.AuctionInfo auction = new TroostwijkScraper.AuctionInfo();
auction.auctionId = auctionId;
auction.type = type;
auction.url = "https://www.troostwijkauctions.com" + href;
// Get ALL visible text from the link (this removes all HTML tags)
var allText = link.text();
String allText = link.text().trim();
// Extract title (usually the first meaningful text, before numbers/location)
var textParts = allText.split("\\s{2,}"); // Split on 2+ spaces
for (var part : textParts) {
part = part.trim();
// Title is usually first long text without dates/numbers/commas
if (part.length() > 15 && !part.matches(".*\\d{1,2}[:/]\\d{2}.*") && !part.matches(".*,\\s*[A-Z]{2}$")) {
auction.title = part;
break;
}
// Pattern: "[day] om [time] [lot_count] [title] [city], [CC]"
// Example: "woensdag om 18:00 1 Vrachtwagens voor bedrijfsvoertuigen Loßburg, DE"
// Step 1: Extract closing time (day + time)
java.util.regex.Pattern timePattern = java.util.regex.Pattern.compile(
"(\\w+)\\s+om\\s+(\\d{1,2}:\\d{2})"
);
java.util.regex.Matcher timeMatcher = timePattern.matcher(allText);
String remainingText = allText;
if (timeMatcher.find()) {
String day = timeMatcher.group(1); // e.g., "woensdag"
String time = timeMatcher.group(2); // e.g., "18:00"
// Store closing time info (could be parsed to LocalDateTime with proper date)
System.out.println(" Closing time: " + day + " om " + time);
// Remove the time part from text
remainingText = allText.substring(timeMatcher.end()).trim();
}
// Fallback: use URL slug for title
if (auction.title == null || auction.title.isEmpty()) {
var titlePattern = Pattern.compile("/a/(.+?)-A[17]-");
var titleMatcher = titlePattern.matcher(href);
if (titleMatcher.find()) {
var slug = titleMatcher.group(1).replace("-", " ");
auction.title = slug.substring(0, 1).toUpperCase() + slug.substring(1);
} else {
auction.title = "Unknown Auction";
}
}
// Extract location (look for "City, CC" pattern where CC is 2-letter country code)
var locPattern = Pattern.compile(
"([A-Za-z][A-Za-z\\s\\-']+?),\\s*([A-Z]{2})(?![A-Za-z])"
);
var locMatcher = locPattern.matcher(allText);
// Step 2: Extract location from the END (always ends with ", CC")
java.util.regex.Pattern locPattern = java.util.regex.Pattern.compile(
"([A-ZÀ-ÿa-z][A-ZÀ-ÿa-z\\s\\-'öäüßàèéêëïôùûç]+?),\\s*([A-Z]{2})\\s*$"
);
java.util.regex.Matcher locMatcher = locPattern.matcher(remainingText);
if (locMatcher.find()) {
auction.city = locMatcher.group(1).trim();
auction.country = locMatcher.group(2);
auction.location = auction.city + ", " + auction.country;
// Remove location from end
remainingText = remainingText.substring(0, locMatcher.start()).trim();
}
// Extract lot count (look for "X kavels" or "X lots")
var lotPattern = Pattern.compile(
"(\\d+)\\s+(?:kavel|lot|item)s?"
);
var lotMatcher = lotPattern.matcher(allText);
// Step 3: Extract lot count (first number after time)
java.util.regex.Pattern lotPattern = java.util.regex.Pattern.compile(
"^(\\d+)\\s+"
);
java.util.regex.Matcher lotMatcher = lotPattern.matcher(remainingText);
if (lotMatcher.find()) {
auction.lotCount = Integer.parseInt(lotMatcher.group(1));
// Remove lot count from beginning
remainingText = remainingText.substring(lotMatcher.end()).trim();
}
// Extract closing time info (look for time patterns)
var timePattern = Pattern.compile(
"(\\d{1,2}:\\d{2})"
);
var timeMatcher = timePattern.matcher(allText);
if (timeMatcher.find()) {
var timeStr = timeMatcher.group(1);
// Note: Would need full date to convert to LocalDateTime
// For now, just log it
// Step 4: What remains is the title
if (!remainingText.isEmpty()) {
auction.title = remainingText;
} else {
// Fallback: use URL slug for title
java.util.regex.Pattern titlePattern = java.util.regex.Pattern.compile("/a/(.+?)-A[17]-");
java.util.regex.Matcher titleMatcher = titlePattern.matcher(href);
if (titleMatcher.find()) {
String slug = titleMatcher.group(1).replace("-", " ").replace("%7C", "|");
auction.title = slug.substring(0, 1).toUpperCase() + slug.substring(1);
} else {
auction.title = "Unknown Auction";
}
}
return auction;
@@ -277,26 +200,26 @@ public class AuctionParsingTest {
System.out.println("\n=== Location Pattern Tests ===");
// Test different location formats
var testCases = new String[]{
"<p>Amsterdam, NL</p>",
"<p class=\"flex truncate\"><span class=\"w-full truncate\">Sofia,<!-- --> </span>BG</p>",
"<p>Berlin, DE</p>",
"<span>Brussels,</span>BE"
};
String[] testCases = {
"<p>Amsterdam, NL</p>",
"<p class=\"flex truncate\"><span class=\"w-full truncate\">Sofia,<!-- --> </span>BG</p>",
"<p>Berlin, DE</p>",
"<span>Brussels,</span>BE"
};
for (var testHtml : testCases) {
var doc = Jsoup.parse(testHtml);
var elem = doc.select("p, span").first();
for (String testHtml : testCases) {
Document doc = Jsoup.parse(testHtml);
Element elem = doc.select("p, span").first();
if (elem != null) {
var text = elem.text();
String text = elem.text();
System.out.println("\nTest: " + testHtml);
System.out.println("Text: " + text);
// Test regex pattern
if (text.matches(".*[A-Z]{2}$")) {
var countryCode = text.substring(text.length() - 2);
var cityPart = text.substring(0, text.length() - 2).trim().replaceAll("[,\\s]+$", "");
String countryCode = text.substring(text.length() - 2);
String cityPart = text.substring(0, text.length() - 2).trim().replaceAll("[,\\s]+$", "");
System.out.println("→ Extracted: " + cityPart + ", " + countryCode);
} else {
System.out.println("→ No match");
@@ -304,4 +227,52 @@ public class AuctionParsingTest {
}
}
}
@Test
public void testFullTextPatternMatching() {
System.out.println("\n=== Full Text Pattern Tests ===");
// Test the complete auction text format
String[] testCases = {
"woensdag om 18:00 1 Vrachtwagens voor bedrijfsvoertuigen Loßburg, DE",
"maandag om 14:30 5 Industriële machines Amsterdam, NL",
"vrijdag om 10:00 12 Landbouwmachines Antwerpen, BE"
};
for (String testText : testCases) {
System.out.println("\nParsing: \"" + testText + "\"");
// Simulated extraction
String remaining = testText;
// Extract time
java.util.regex.Pattern timePattern = java.util.regex.Pattern.compile("(\\w+)\\s+om\\s+(\\d{1,2}:\\d{2})");
java.util.regex.Matcher timeMatcher = timePattern.matcher(remaining);
if (timeMatcher.find()) {
System.out.println(" Time: " + timeMatcher.group(1) + " om " + timeMatcher.group(2));
remaining = remaining.substring(timeMatcher.end()).trim();
}
// Extract location
java.util.regex.Pattern locPattern = java.util.regex.Pattern.compile(
"([A-ZÀ-ÿa-z][A-ZÀ-ÿa-z\\s\\-'öäüßàèéêëïôùûç]+?),\\s*([A-Z]{2})\\s*$"
);
java.util.regex.Matcher locMatcher = locPattern.matcher(remaining);
if (locMatcher.find()) {
System.out.println(" Location: " + locMatcher.group(1) + ", " + locMatcher.group(2));
remaining = remaining.substring(0, locMatcher.start()).trim();
}
// Extract lot count
java.util.regex.Pattern lotPattern = java.util.regex.Pattern.compile("^(\\d+)\\s+");
java.util.regex.Matcher lotMatcher = lotPattern.matcher(remaining);
if (lotMatcher.find()) {
System.out.println(" Lot count: " + lotMatcher.group(1));
remaining = remaining.substring(lotMatcher.end()).trim();
}
// What remains is title
System.out.println(" Title: " + remaining);
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -67,28 +67,6 @@ public class TroostwijkScraperTest {
}
}
@Test
public void testDiscoverDutchAuctions() {
// Discover auctions from the live page
List<Integer> auctions = scraper.discoverDutchAuctions();
// Verify that auctions were found
assertNotNull(auctions, "Auctions list should not be null");
assertFalse(auctions.isEmpty(), "Should find at least one Dutch auction");
// Verify that all sale IDs are positive integers
for (Integer saleId : auctions) {
assertNotNull(saleId, "Sale ID should not be null");
assertTrue(saleId > 0, "Sale ID should be positive: " + saleId);
}
// Verify no duplicate sale IDs
long uniqueCount = auctions.stream().distinct().count();
assertEquals(auctions.size(), uniqueCount, "All sale IDs should be unique");
System.out.println("✓ Found " + auctions.size() + " unique Dutch auctions");
System.out.println("✓ Sale IDs: " + auctions);
}
@Test
public void testFetchAndPersistAuctionData() throws SQLException {

File diff suppressed because one or more lines are too long

456
src/test/resources/test.md Normal file
View File

@@ -0,0 +1,456 @@
## Woensdag 3 dec 25
* [
woensdag om 16:00
![Industry & machinery](https://media.tbauctions.com/image-media/37f8e30d-7f4e-4af4-bb8a-029975b089cf/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/da3276a5-eb99-4a5d-ac3b-cc546b0a5f39/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/4d273787-cc80-4ac5-b89d-20525871426a/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/0b0b946d-26a6-486f-8c73-e9d0394e4e70/file?imageSize=1024x768 1024w)
145
Industrie & machines
Meerdere locaties (45)
](/a/industrie-machines-A3-37358)
* [
woensdag om 16:00
![D | Racing car transporters, crane polyp grabs and containers from inventory adjustment](https://media.tbauctions.com/image-media/b020da96-bb92-4e22-8a7b-2dd205dd5f7f/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/d3153444-7d59-45ac-8160-3cdaa7e1074e/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/be9f0e03-f585-47d0-abf0-3e802e21c8ad/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/658c88d7-0430-4454-b7fb-f48eeadeb401/file?imageSize=1024x768 1024w)
38
D | Raceautotransporters, kraan-polypengrepen en containers uit voorraadaanpassing
Nieheim, DE
](/a/d-%7C-raceautotransporters-kraan-polypengrepen-en-containers-uit-voorraadaanpassing-A1-39772)
* [
woensdag om 16:00
![Food Processing Equipment and Packaging Machinery](https://media.tbauctions.com/image-media/dd6b698d-79f5-40a4-ab74-2beca7a5341e/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/198b179c-0921-420f-9b14-ab430a957fb0/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/842f0a7d-cd05-4040-bb00-8691def7e9bc/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/b7855c86-f9e8-4346-9d0b-565d7cd126cc/file?imageSize=1024x768 1024w)
61
Voedselverwerkende apparatuur en verpakkingsmachines
CHOMERAC, FR
](/a/voedselverwerkende-apparatuur-en-verpakkingsmachines-A1-39319)
* [
woensdag om 16:00
![Agricultural & earthmoving machines](https://media.tbauctions.com/image-media/a11f32a9-5197-4486-8074-803b4da25227/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/dcf35ea2-0e1b-4d30-8cd7-1b534ecf7b0e/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/4857e24d-25b2-46f6-bde4-c0a5383508dd/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/7210f5e7-e124-40ab-b2db-c54e02af416a/file?imageSize=1024x768 1024w)
117
Landbouw- & grondverzetmachines
Meerdere locaties (49)
](/a/landbouw-grondverzetmachines-A3-37375)
* [
woensdag om 17:00
![Tools & equipment](https://media.tbauctions.com/image-media/24f212ce-e1f0-45a3-b095-c3944fd35340/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/1cc0cb65-68f6-4108-b51a-11cb1652f366/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/92d4629a-d259-43ad-806d-de99da15ea32/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/2653c057-5e28-46dc-aacc-08920f0500b4/file?imageSize=1024x768 1024w)
261
Gereedschappen & uitrusting
Meerdere locaties (36), BE
](/a/gereedschappen-uitrusting-A3-37367)
* [
woensdag om 18:00
![](https://media.tbauctions.com/image-media/13b74047-5372-493f-81dc-2d075c3bada1/file?imageSize=1024x768 1024w)
1
Vrachtwagens voor bedrijfsvoertuigen
Loßburg, DE
](/a/vrachtwagens-voor-bedrijfsvoertuigen-A7-39531)
* [
woensdag om 19:00
![White goods and accessories](https://media.tbauctions.com/image-media/1abf2d9b-7596-45e3-93b3-b503397eba0e/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/8cb4c2f1-f298-4e20-b221-ec828cca717c/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/d588cf94-3f82-4785-ace4-a8014a1859fd/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/9036f5bf-7fc7-43a3-ae8a-41c1376f60ec/file?imageSize=1024x768 1024w)
61
Witgoed en accessoires
Etten-Leur, NL
](/a/witgoed-en-accessoires-A1-27241)
* [
Opent 28 nov 17:00
![](https://media.tbauctions.com/image-media/4f41caa7-865a-4fe7-9cd5-305bd2e455f6/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/1cdf88f5-67d4-4932-96a4-449ad17ba51d/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/c47fee25-0326-40e1-b1db-3190a19ecb1a/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/a3e7c080-2dcf-45aa-99ab-2072697b4f54/file?imageSize=1024x768 1024w)
54
Collectie Rolex en Cartier horloges
Dordrecht, NL
](/a/collectie-rolex-en-cartier-horloges-A1-39398)
* [
woensdag om 19:00
![Kitchens and sanitary facilities](https://media.tbauctions.com/image-media/6379bf2c-aed2-4fbe-8fce-367c9d200141/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/16e97117-3cc2-4ced-bfe1-4f24e0b8d784/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/0002b9da-1ba5-429c-b377-eaddc3714e37/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/d3186016-0d7b-433a-b3e8-903fd85ec929/file?imageSize=1024x768 1024w)
254
SHOWROOMKEUKENS en INBOUWAPPARATUUR
Tilburg, NL
](/a/showroomkeukens-en-inbouwapparatuur-A1-39480)
* [
woensdag om 19:00
![](https://media.tbauctions.com/image-media/e6b76a75-9994-46b0-a2fa-c9a321f62980/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/ebef8850-5265-446a-ab32-5f2cd0d2bf88/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/f82e2b71-f908-472e-8019-9b2b15b0cb17/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/d92ba732-28b0-462f-bab5-ce82540d1c81/file?imageSize=1024x768 1024w)
499
Machines, retourgoederen en restpartijen
Harlingen, NL
](/a/machines-retourgoederen-en-restpartijen-A1-39642)
* [
woensdag om 19:00
![Lots of tools, office inventory, retail goods, decoration and olive trees](https://media.tbauctions.com/image-media/f949084a-50d5-4182-acfb-5d21ac54e471/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/96ef91fa-3927-49d4-af9e-ef709581ac51/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/2917a150-c99a-439f-8767-68ece5214800/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/328e4999-4a75-4f29-bd95-66b1de4e46e8/file?imageSize=1024x768 1024w)
120
Partijen gereedschap, kantoorinventaris, detailhandelgoederen, decoratie en olijfbomen
Meerdere locaties (3), NL
](/a/partijen-gereedschap-kantoorinventaris-detailhandelgoederen-decoratie-en-olijfbomen-A1-27016)
* [
woensdag om 19:00
![Bankruptcy vehicles](https://media.tbauctions.com/image-media/82880ed5-30f0-4055-99bd-a2cf07fad2ef/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/64312888-1b04-4f75-a0f1-386752232172/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/f4268e70-82fb-4ea1-ab92-c23dff650909/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/0c52cb25-fe99-4848-961b-a8a85c7a66d4/file?imageSize=1024x768 1024w)
16
Faillissementsvoertuigen
Meerdere locaties (3), NL
](/a/faillissementsvoertuigen-A1-38368)
* [
woensdag om 19:00
![](https://media.tbauctions.com/image-media/41066c8c-7806-43ee-beef-918c43e18cc7/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/a2543ed7-409e-449f-aa42-c68721432fdf/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/17dee71a-201f-40c5-9e8d-f71f807b27a9/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/0c8f8bb7-60fc-4c3f-af17-1080f489a8c2/file?imageSize=1024x768 1024w)
78
Personenautos, oldtimers, campers en brommobielen
Buitenpost, NL
](/a/personenauto%E2%80%99s-oldtimers-campers-en-brommobielen-A1-39508)
* [
woensdag om 19:00
![](https://media.tbauctions.com/image-media/278c35b9-3e5a-42eb-a09b-1bfdf48c60b2/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/2ced3007-a441-4752-84fc-eb3e2ceba7a2/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/36ed78ee-32f2-4824-b8eb-fd38f3d87e27/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/caa71786-c172-491f-bd78-787946e35480/file?imageSize=1024x768 1024w)
391
Bezorgveiling Faillissement Dvize B.V. Hyundai Power Products gereedschappen
Meerdere locaties (2)
](/a/bezorgveiling-faillissement-dvize-b-v-%E2%80%93-hyundai-power-products-gereedschappen-A1-39409)
* [
woensdag om 19:00
![](https://media.tbauctions.com/image-media/37df514f-357a-43aa-9a5a-8fedefb7068f/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/37df514f-357a-43aa-9a5a-8fedefb7068f/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/37df514f-357a-43aa-9a5a-8fedefb7068f/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/4b8b6f24-4ca1-4141-a3e3-254caba98284/file?imageSize=1024x768 1024w)
208
Kunstplanten en bomen, composiet gevel- en vloerbekleding en akoestische materialen
De Lier, NL
](/a/kunstplanten-en-bomen-composiet-gevel-en-vloerbekleding-en-akoestische-materialen-A1-28707)
* [
woensdag om 19:00
![Metalworking machines, tools and stock in connection with company relocation](https://media.tbauctions.com/image-media/d5232c84-b313-48dc-973d-b82e762f000e/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/997e6803-7667-49ce-8a2c-b62939ee0aa7/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/40cec190-c669-4d80-b9fa-99039e6804ea/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/77371ea9-2869-4df6-97b4-145d76a34615/file?imageSize=1024x768 1024w)
181
Metaalbewerkingsmachines, gereedschap en voorraad in verband met bedrijfsverhuizing
Cuijk, NL
](/a/metaalbewerkingsmachines-gereedschap-en-voorraad-in-verband-met-bedrijfsverhuizing-A1-39360)
* [
woensdag om 19:00
![](https://media.tbauctions.com/image-media/2faa2b06-09c0-49ec-ba31-b8d24e15263a/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/485930ea-fbd4-4fc0-adeb-53f9e4f9b89e/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/fdb0a385-b27e-4aa2-b0c9-aca59d7c5f96/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/a268ff31-f1f1-421c-80e9-97cfd0fcfa7b/file?imageSize=1024x768 1024w)
238
Overstock en magazijnopruiming
Heesch, NL
](/a/overstock-en-magazijnopruiming-A1-39538)
* [
woensdag om 19:00
![Collector's Auction Scooters & Motorcycles](https://media.tbauctions.com/image-media/8464e9fc-b60a-4081-b898-d98328c8d1dd/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/a953420a-4d1d-4e80-9c53-be7bb85106c5/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/7f0198da-b213-46c0-8a0b-6a382ca1b029/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/7b11eee5-efe7-4fbd-8529-b1d50bd4db2e/file?imageSize=1024x768 1024w)
47
Verzamelveiling Scooters en Motoren
Meerdere locaties (2), NL
](/a/verzamelveiling-scooters-en-motoren-A1-28428)
* [
woensdag om 19:00
![Cars & transport](https://media.tbauctions.com/image-media/28be6ce7-6987-48ed-8758-622ab308ca2a/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/5be09c82-6f9a-41b8-b0dd-2d5a43327cb4/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/8fe5b954-b16c-4e72-a4b9-be6b345d5a82/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/183e08ae-4769-4a9d-a7db-2d07ab487781/file?imageSize=1024x768 1024w)
338
Auto's & transport
Meerdere locaties (109)
](/a/auto%27s-transport-A3-37349)
* [
woensdag om 19:30
![](https://media.tbauctions.com/image-media/f1401ff5-4e5d-41e5-b4b2-6771fd7aad83/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/d788438c-5a47-4eeb-aced-4777c5bb4701/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/f888c72a-8756-4b83-994d-a4bb6a08eb05/file?imageSize=1024x768 1024w)
![](https://media.tbauctions.com/image-media/9566453d-2c19-431c-b5c6-521cfdc01594/file?imageSize=1024x768 1024w)
74
Gouden juwelen en diamanten
Meerdere locaties (28)
](/a/gouden-juwelen-en-diamanten-A1-29562)

Binary file not shown.