UK Migrant Crime Tracker Development Thread

  • Want to keep track of this thread?
    Accounts can bookmark posts, watch threads for updates, and jump back to where you stopped reading.
    Create account
There's 35 migrants apparently heading to Mold very soon.

They'll be held in the same building, but locals aren't happy.

@he who has thus come/gone In 'Gog' Land ('Gog' meaning North) there's a fair few things and places of interest:

Anglesey and Bardsey Island
Portmeirion (famous for 'The Prisoner)
Llandudno (the birthplace of 'Alice In Wonderland')
Conwy (famous for its Castle and also Drew Pritchard from Salvage Hunters)
Bleanau Ffestiniog (plus the Welsh Highland Narrow Gauge Railway)
Llangollen
and of course... Wrexham (famous for Deadpool FC).
 
Sure! The dashboard is very wobbly at the moment, works mostly but there's a few quirks. Want to tidy it up before I allow trusted people to go and edit stuff, but absolutely. It's set up with that in mind but it'll just be me for a bit.
i can volunteer some of my off time (weekends) to help parse info from articles. dm for email if you want to help. i also have some amatuer editing skills in osm. i have a particular focus in going through large amounts of data.
 
Last edited:
I started this thinking I'd be able to handle it pretty easily. Reading one report is easy but when you get into the 30th that night, it really drains you. Especially when 80% are rapes, some with victims ranging from 2 years old - 95 years old.

Feeling this way proves we're human and there's a reason we're doing this project. One thing that's really kept me going through the worst of the these is remembering that when this is shared around, we might allow someone to see what their local migrant nonces look like and will be able to ensure they, their families and especially their children never approach these people.

Thanks to both you and @#FF0000 for helping get these shitheads' crimes on the map as I'm developing more. Will get on and do a few cases later when I'm sick of coding for the night.
If you need extra manpower, I'd be willing to jump on and help with running through these reports.
 
Sorry if I'm suggesting something already discussed or inapplicable to the setup. I'm grunching for the most part. If news articles are the source of so much of your data, have y'all built simple JavaScript tools to streamline extraction of the key details from the major sites you'll use?

I just spent the past hour fucking around with different layouts and AI tweaking. I used Telegraph, BBC, The Sun, Sky, Daily Mail and another:

JavaScript:
const nameExtractionBlacklist = new Set([
    'Home Office', 'High Court', 'Crown Court', 'West London', 'South London', 'North London', 'East London', 'Judge',
    'Police Scotland', 'The Sun', 'Daily Mail', 'Judge Jane Farquharson', 'Telegraph Reporters', 'Sky News', 'Defence Counsel',
    'Prime Minister', 'Judge Morris', 'Lord Doherty', 'Lord Ericht'
]);

const spelledOutAges = {
    one: 1,
    two: 2,
    three: 3,
    four: 4,
    five: 5,
    six: 6,
    seven: 7,
    eight: 8,
    nine: 9,
    ten: 10,
    eleven: 11,
    twelve: 12,
    thirteen: 13,
    fourteen: 14,
    fifteen: 15,
    sixteen: 16,
    seventeen: 17,
    eighteen: 18
};

const spelledOutAgesRegexString = Object.keys(spelledOutAges).join('|');

const immigrationStatusRegex = {
    "Asylum Seeker": /\b(asylum(\s+seeker)?|asylum claim|seeking asylum|granted asylum)\b/i,
    "Refugee": /\brefugee\b/i,
    "Migrant": /\b((illegal|channel)\s+)?migrant(s| worker)?\b/i,
};

const crimeDataRegex = {
    perpetrator_high_confidence: /\b(?<name>[A-Z][a-z'-]+(?:\s+[a-zA-Z][a-z'-]+){1,2}),\s*(?:aged\s+)?(?<age>\d{1,2})\b/,
    perpetrator_mohammed: /\b(?<name>(M[uo]h?a[nm][nm][ae][dt]?)\s+[A-Z][a-z'-]+)\b/i,
    perpetrator_headline: /^(?<name>[A-Z][a-z'-]+(?:\s+[A-Z][a-z'-]+){1,2}):\s+/,
    perpetrator_age_by_context: /\b(?:alleged|claimed|said|accused|arrested|convicted|charged|prosecuted)\s+(?:the\s+)?(?:man\s+)?(?:aged\s+)?(?<age>\d{1,2})[- ]?(?:year|yo)s?[- ]?old\b/i,
    perpetrator_candidates: /\b([A-Z][a-z'-]+(?:\s+[A-Z][a-z'-]+){1,2})\b/g,
    victim_details_standard: new RegExp(`\\b(?<age_digit>\\d{1,2}|(?<age_word>${spelledOutAgesRegexString}))[- ]?(?:year|yo)s?[- ]?old\\s+(?<gender>woman|girl|female|man|boy|male|teenager|child|pupil|victim)s?\\b`, 'i'),
    victim_details_context: new RegExp(`\\bvictims?\\s+(?:aged\s+)?(?<age_digit>\\d{1,2}|(?<age_word>${spelledOutAgesRegexString}))\\b`, 'i'),
    victim_details_standalone: /\b(?:the|a|an)\s+(?<gender>teenager|child|woman|man|girl|boy)\b/i,
    crimes: /\b(rape|raping|raped|sexual assault|sexually assaulted|sexual assaulting|sexual abuse|sexually abusing|sexual offence|assault by penetration|voyeurism|kidnapping|murder|harass|abuse)\b/gi,
};

const nationalitiesRegex = {
    "Afghan": /\bAfghani?(istan)?\b/i,
    "Albanian": /\bAlbanian\b/i,
    "Bangladeshi": /\bBangladeshi?\b/i,
    "Eritrean": /\bEritrea(n)?\b/i,
    "Iraqi": /\bIraq(i)?\b/i,
    "Iranian": /\bIran(ian)?\b/i,
    "Jordanian": /\bJordan(ian)?\b/i,
    "Muslim": /\bMuslim\b/i,
    "Nigerian": /\bNigeria(n)?\b/i,
    "Pakistani": /\b(Paki)(stani?)?\b/i,
    "Somali": /\bSomali(a)?\b/i,
    "Sudanese": /\bSudan(ese)?\b/i,
    "Syrian": /\bSyria(n)?\b/i,
    "Turkish": /\bTurkey(ish)?\b/i
};

const siteConfigs = [{
    regex: /telegraph\.co\.uk/i,
    selectors: {
        headline: 'h1.e-headline',
        author: () => Array.from(document.querySelectorAll('.e-byline__author'))
            .map(el => el.textContent.trim().replace(/\.$/, '').trim()),
        date: () => {
            const el = document.querySelector('time.e-published-date');
            const dt = el ? new Date(el.getAttribute('datetime')) : null;
            return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
        },
        url: () => document.querySelector('link[rel="canonical"]')?.href ?? window.location.href,
        content: () => Array.from(document.querySelectorAll('.article-body-text p'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: () => qS('[data-test="article-body-image"] img')?.src ?? ''
    }
}, {
    regex: /bishopsstortfordindependent\.co\.uk/i,
    selectors: {
        headline: 'h1.HeadingFont',
        author: '.authorName a',
        date: () => {
            const el = document.querySelector('.ArticleDate');
            const raw = el?.textContent.replace('Published:', '').split(',')[1]?.trim();
            if (!raw) return '';
            const dt = new Date(raw);
            return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
        },
        url: () => document.querySelector('[data-ob-contenturl]')?.getAttribute('data-ob-contenturl') ?? window.location.href,
        content: () => Array.from(document.querySelectorAll('.pagestory p'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: ''
    }
}, {
    regex: /bbc\.co(m|\.uk)/i,
    selectors: {
        headline: 'h1.sc-f98b1ad2-0.dfvxux',
        author: () => [],
        date: () => {
            const el = document.querySelector('time.sc-801dd632-2.IvNnh');
            const dt = el ? new Date(el.getAttribute('datetime')) : null;
            return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
        },
        url: () => document.querySelector('link[rel="canonical"]')?.href ?? window.location.href,
        content: () => Array.from(document.querySelectorAll('.sc-9a00e533-0.hxuGS'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: () => document.querySelector('figure img')?.getAttribute('src') ?? ''
    }
}, {
    regex: /thesun\.co\.uk/i,
    selectors: {
        headline: 'h1.article__headline',
        author: () => {
            const authorElement = document.querySelector('.article__author-link');
            const authorText = authorElement?.textContent.trim() ?? '';
            if (authorText) {
                return [authorText];
            }
            return [];
        },
        date: () => {
            const el = qS("li.article__published time");
            if (el) {
                const dt = new Date(el.getAttribute('datetime'));
                return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
            }
            return '';
        },
        url: () => window.location.href,
        content: () => Array.from(document.querySelectorAll('.article__content > p'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: () => document.querySelector('picture.article-top-mobile__image img')?.getAttribute('src') ?? ''
    }
}, {
    regex: /dailymail\.co\.uk/i,
    selectors: {
        headline: 'h1.article-page-headline',
        author: '.author-section a',
        date: () => {
            const el = document.querySelector('.article-timestamp-published time');
            if (el) {
                const dt = new Date(el.getAttribute('datetime'));
                return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
            }
            return '';
        },
        url: () => document.querySelector('link[rel="canonical"]')?.href ?? window.location.href,
        content: () => Array.from(document.querySelectorAll('div[itemprop="articleBody"] > p'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: () => document.querySelector('div[itemprop="articleBody"] img')?.getAttribute('src') ?? ''
    }
}, {
    regex: /thesun\.co\.uk/i,
    selectors: {
        headline: 'h1.article__headline',
        author: () => {
            const authorElement = document.querySelector('.article__author-link');
            const authorText = authorElement?.textContent.trim() ?? '';
            if (authorText) {
                return [authorText];
            }
            return [];
        },
        date: () => {
            const el = document.querySelector('time.article__published');
            if (el) {
                const dt = new Date(el.getAttribute('datetime'));
                return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
            }
            return '';
        },
        url: () => window.location.href,
        content: () => Array.from(document.querySelectorAll('.article__content > p'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: () => document.querySelector('picture.article-top-mobile__image img')?.getAttribute('src') ?? ''
    }
}, {
    regex: /news\.sky\.com/i,
    selectors: {
        headline: 'h1.sdc-article-header__title',
        author: () => [],
        date: () => {
            const el = document.querySelector('.sdc-article-date__date-time');
            const raw = el?.textContent?.trim().split(',')[0];
            if (!raw) return '';
            const dt = new Date(raw);
            return dt && !isNaN(dt) ? `${dt.getMonth() + 1}/${dt.getDate()}/${dt.getFullYear()}` : '';
        },
        url: () => document.querySelector('link[rel="canonical"]')?.href ?? window.location.href,
        content: () => Array.from(document.querySelectorAll('div[data-testid="article-body"] > p'))
            .map(p => p.textContent.trim())
            .join('\n\n'),
        image: () => document.querySelector('img.sdc-article-image__item')?.getAttribute('src') ?? ''
    }
}];

function extractArticleData() {
    const url = window.location.href;
    const matchedSite = siteConfigs.find(site => site.regex.test(url));

    const dataSchema = {
        headline: '',
        author: [],
        date: '',
        url: '',
        content: '',
        image: '',
        immigration_status: null,
        crimes: [],
        perpetrator: {
            name: null,
            age: null,
            sex: null,
            ethnicity: null
        },
        victim: {
            name: null,
            sex: null,
            age: null
        },
    };

    if (!matchedSite) {
        return dataSchema;
    }

    const extractedData = {
        ...dataSchema
    };
    extractedData.perpetrator = {
        ...dataSchema.perpetrator
    };
    extractedData.victim = {
        ...dataSchema.victim
    };
    extractedData.crimes = [];

    for (const key in matchedSite.selectors) {
        const selector = matchedSite.selectors[key];
        try {
            if (typeof selector === 'function') {
                extractedData[key] = selector();
            } else {
                const elements = Array.from(document.querySelectorAll(selector));
                const texts = elements.map(el => el.textContent.trim()).filter(Boolean);
                extractedData[key] = key === 'author' ? texts : texts[0] || '';
            }
        } catch (e) {
            console.error(`Error extracting ${key}:`, e);
            extractedData[key] = key === 'author' ? [] : '';
        }
    }

    if (Array.isArray(extractedData.author)) {
        extractedData.author = [...new Set(extractedData.author.flat())];
    } else if (typeof extractedData.author === 'string' && extractedData.author) {
        extractedData.author = [extractedData.author];
    } else {
        extractedData.author = [];
    }

    extractedData.perpetrator = {
        ...dataSchema.perpetrator
    };
    extractedData.victim = {
        ...dataSchema.victim
    };

    const combinedText = (extractedData.headline || '') + ' ' + (extractedData.content || '');

    for (const status in immigrationStatusRegex) {
        if (immigrationStatusRegex[status].test(combinedText)) {
            extractedData.immigration_status = status;
            break;
        }
    }

    let perpMatch = combinedText.match(crimeDataRegex.perpetrator_high_confidence);
    if (perpMatch && perpMatch.groups) {
        extractedData.perpetrator.name = perpMatch.groups.name.trim();
        extractedData.perpetrator.age = parseInt(perpMatch.groups.age, 10);
    }

    if (!extractedData.perpetrator.name) {
        perpMatch = combinedText.match(crimeDataRegex.perpetrator_mohammed);
        if (perpMatch && perpMatch.groups) {
            extractedData.perpetrator.name = perpMatch.groups.name.trim();
        }
    }

    if (!extractedData.perpetrator.name && extractedData.headline) {
        perpMatch = extractedData.headline.match(crimeDataRegex.perpetrator_headline);
        if (perpMatch && perpMatch.groups) {
            extractedData.perpetrator.name = perpMatch.groups.name.trim();
        }
    }

    if (!extractedData.perpetrator.name) {
        const candidates = combinedText.match(crimeDataRegex.perpetrator_candidates) || [];
        const counts = {};
        for (const name of candidates) {
            if (!nameExtractionBlacklist.has(name)) {
                counts[name] = (counts[name] || 0) + 1;
            }
        }

        const mostFrequent = Object.entries(counts).sort((a, b) => b[1] - a[1]);
        if (mostFrequent.length > 0 && mostFrequent[0][1] > 1) {
            extractedData.perpetrator.name = mostFrequent[0][0];
        }
    }

    if (extractedData.perpetrator.name) extractedData.perpetrator.sex = 'male';
    for (const nat in nationalitiesRegex) {
        if (nationalitiesRegex[nat].test(combinedText)) {
            extractedData.perpetrator.ethnicity = nat;
            break;
        }
    }

    let victimMatch = combinedText.match(crimeDataRegex.victim_details_standard);
    if (!victimMatch) {
        victimMatch = combinedText.match(crimeDataRegex.victim_details_context);
    }

    if (!victimMatch) {
        victimMatch = combinedText.match(crimeDataRegex.victim_details_standalone);
    }
    if (victimMatch && victimMatch.groups) {
        const {
            age_digit,
            age_word,
            gender
        } = victimMatch.groups;

        const age = age_digit ? parseInt(age_digit, 10) : (age_word ? spelledOutAges[age_word.toLowerCase()] : null);

        if (age) {
            extractedData.victim.age = age;
        } else if (gender && gender.toLowerCase() === 'teenager') {

            extractedData.victim.age = 16;
        }

        if (gender) {
            const genderKeyword = gender.toLowerCase().replace(/sneed$/, '');
            if (['woman', 'girl', 'female', 'teenager'].includes(genderKeyword)) {
                extractedData.victim.sex = 'female';
            } else if (['man', 'boy', 'male'].includes(genderKeyword)) {
                extractedData.victim.sex = 'male';
            }
        }
    }

    const crimeMatches = combinedText.match(crimeDataRegex.crimes);
    if (crimeMatches) {
        extractedData.crimes = [...new Set(crimeMatches.map(c => c.toLowerCase()))];
    }

    return extractedData;
}

extractArticleData();

Example #1: Sadeq Nikzad: Man jailed for raping 15-year-old after following her in Falkirk town centre

JSON:
{
    "headline": "Sadeq Nikzad: Man jailed for raping 15-year-old after following her in Falkirk town centre",
    "author": [],
    "date": "6/18/2025",
    "url": "https://news.sky.com/story/sadeq-nikzad-man-jailed-for-raping-15-year-old-after-following-her-in-falkirk-town-centre-13385464",
    "content": "A man who raped a 15-year-old girl after following her in a busy town centre has been jailed for nine years.\n\nSadeq Nikzad, an Afghan asylum seeker, preyed on the teenager after spotting her in Falkirk in October 2023.\n\nThe Crown Office and Procurator Fiscal Service said the 29-year-old attempted to speak to the girl, repeatedly asking for her phone number and uttering sexual remarks.\n\nHe then led her into a courtyard where he subjected her to a serious sexual assault.\n\nDetective Inspector Forbes Wilson, from the Forth Valley Public Protection Unit, said: \"This was a particularly harrowing attack which was carried out during daylight in a busy town centre.\n\n\"Nikzad's heinous actions had a profound effect on his young victim and I would like to commend her strength throughout this ordeal.\n\n\"I would also like to thank local officers for their excellent work which ensured Nikzad was identified, arrested and off the street within a few short hours following the incident.\"\n\nNikzad was in March found guilty of rape following a trial at the High Court in Edinburgh.\n\nAt the High Court in Livingston on Wednesday, Judge John Morris KC said: \"Mr Nikzad, whilst I appreciate that you do not accept you have done anything wrong, the fact remains that you have been convicted of an extremely serious sexual offence against a child.\"\n\nHe added that \"only a substantial custodial sentence\" would be appropriate.\n\nRead more from Sky News:UK temperatures 'could hit 46C in future'Singer R Kelly rushed to hospitalIsraeli tanks 'kill 51 people waiting for aid'\n\nNikzad was handed a 12-year extended sentence, with nine years in prison and three years on licence once released back into the community.\n\nHe was also placed on the sex offenders' register indefinitely and banned from contacting his victim.\n\nKatrina Parkes, procurator fiscal for high court sexual offences, said: \"This was an appalling, opportunistic attack on a young girl who should have been safe going about her daily business.\n\n\"The victim should be commended for reporting Sadeq Nikzad to the police, ensuring that he has now been held accountable while also protecting others from harm.\"",
    "image": "https://e3.365dm.com/25/06/768x432/skynews-sadeq-nikzad-falkirk_6945080.jpg?20250618133307",
    "immigration_status": "Asylum Seeker",
    "crimes": [
        "raping",
        "raped",
        "sexual assault",
        "rape",
        "sexual offence"
    ],
    "perpetrator": {
        "name": "Sadeq Nikzad",
        "age": 29,
        "sex": "male",
        "ethnicity": "Afghan"
    },
    "victim": {
        "name": null,
        "sex": "male",
        "age": 15
    }
}

Example #2: Rapist chased down street by victim after attack jailed for seven years
JSON:
{
    "headline": "Rapist chased down street by victim after attack jailed for seven years",
    "author": [],
    "date": "10/25/2023",
    "url": "https://news.sky.com/story/rapist-chased-down-street-by-victim-after-attack-jailed-for-seven-years-12992241",
    "content": "A rapist who was chased by his victim after he attacked her in an Aberdeen street has been jailed for seven years.\n\nMohammed Abdullah targeted the 18-year-old woman after she left a nightclub.\n\nThe High Court in Edinburgh heard last month how the 19-year-old seized her by the wrists and restrained her before raping her.\n\nJurors were shown CCTV footage in which they could hear a woman screaming.\n\nThey were also shown video footage of the victim adjusting her clothing moments after the attack, and going on to chase Abdullah.\n\nAbdullah had denied any wrongdoing but was found guilty of rape after a trial.\n\nAs well as the seven-year jail term, Abdullah was also added to the sex offenders' register for life when he was sentenced.\n\nLord Ericht said he had taken the sentencing guidelines on young people into consideration in deciding the punishment, and noted Abdullah had no previous convictions.\n\nThe judge said: \"Your victim was unknown to you.\n\n\"You were hanging about, late at night, outside a nightclub. After your victim left the nightclub, you raped her in the street.\"\n\nThe incident occurred in Bon Accord Street on 17 August 2021.\n\nJurors heard how the woman met Abdullah shortly after leaving the club and \"appeared to be unsteady on her feet\".\n\nCCTV captured Abdullah entering a boarding house with his victim. The woman could be heard saying: \"I have never been to this place before.\"\n\nShe then walked back out, and said: \"Where is my bank card?\"\n\nOutside the property, she was recorded saying \"no\" repeatedly and mentioned her boyfriend.\n\nAbdullah fled the scene following the attack but was tracked down by officers.\n\nAfter seizing his mobile phone, police recovered footage of young women dancing in the street outside a nightclub.\n\nRead more from Sky News:Rapist given lighter sentence due to his 'immaturity'Man who raped and burned woman alive given lighter sentence\n\nWhen officers detained Abdullah, they found he couldn't speak English and had to communicate through an online interpreter before arresting him.\n\nHe also sat in court with an interpreter, who helped him understand the evidence given to the jury.\n\nThe court heard how Abdullah had moved from Sudan to Scotland in the hope of securing a \"better life\".\n\nDefence solicitor advocate Paul Mullen said: \"He is a very young man who has come to these shores via a very circuitous route in the hope of setting up for himself a better life.\n\n\"He has never been on remand before. He is isolated.\n\n\"He's had very little contact with his family in Sudan. He's however been receiving visits from guardianship services.\"",
    "image": "https://e3.365dm.com/23/08/768x432/skynews-edinburgh-scotland_6250556.jpg?20240528163330",
    "immigration_status": null,
    "crimes": [
        "raping",
        "rape",
        "raped"
    ],
    "perpetrator": {
        "name": "Mohammed Abdullah",
        "age": null,
        "sex": "male",
        "ethnicity": "Sudanese"
    },
    "victim": {
        "name": null,
        "sex": "female",
        "age": 18
    }
}

Example #3: Pakistani asylum seeker appears in court accused of raping eight-year-old girl and subjecting her to multiple sex attacks
JSON:
{
    "headline": "Pakistani asylum seeker appears in court accused of raping eight-year-old girl and subjecting her to multiple sex attacks",
    "author": [
        "NOOR QURASHI, NEWS REPORTER"
    ],
    "date": "8/5/2025",
    "url": "https://www.dailymail.co.uk/news/article-14973351/Pakistani-asylum-seeker-court-rape-eight-girl.html",
    "content": "A Pakistani asylum seeker has appeared in court after being accused of repeatedly raping an eight-year-old girl.\n\nIt is alleged that Kamran Khan, 43, raped the child twice between September 2024 and July 2025 before forcing her to watch a third person engage in sexual activity.\n\nHe made the eight-year-old make him ejaculate and also put his hand and penis on her genitals, it is claimed.\n\nKhan, of Streatham High Road, south London, denied the two counts of rape at Inner London Crown Court, alleged to have taken place in the borough of Lambeth.\n\nHe further denied two counts of causing a child to watch a sex act, four counts of sexually assaulting a child and two counts of causing a child under thirteen to engage in sexual activity.\n\nThe accused held his head in his hands as he entered his not guilty pleas, aided by an Urdu interpreter.\n\nHe was remanded in custody ahead of his seven-day trial on January 5 next year.\n\nJudge Benedict Kelleher told Khan: ‘Failing to attend court when required whether from custody or from bail may be a separate offence.\n\n‘If a defendant fails to attend their trial then the trial may proceed in his absence in which case his lawyer may withdraw from the case leaving him unrepresented and the judge may inform the jury of the reason for his absence.’",
    "image": "https://i.dailymail.co.uk/1s/2025/08/05/19/100947631-14973351-image-a-25_1754417805727.jpg",
    "immigration_status": "Asylum Seeker",
    "crimes": [
        "raping",
        "raped",
        "rape"
    ],
    "perpetrator": {
        "name": "Kamran Khan",
        "age": 43,
        "sex": "male",
        "ethnicity": "Pakistani"
    },
    "victim": {
        "name": null,
        "sex": "female",
        "age": null
    }
}

There's some obvious fuck-ups that are easy to fix, but I can't right now. Like simple shit in the regex so it stops omitting victims ages when it's eight-years-old or whatever. But these scripts can be fixed and loaded into Puppeteer and you can just tell it the URLs to go, scrape, and report back in the format needed. You'd still need to give the data a once-over to make sure everything is correct, but it should save you time.
 
Last edited:
have y'all built simple JavaScript tools to streamline extraction of the key details from the major sites you'll use?
It was one of those "that would be cool" ideas but most of these projects are Python and I'm no Python dev. For JS though, I could have a look at that. Thanks for the code blocks, very interesting stuff. I'll give you access to the Git repo if you're interested?

Found a very interesting thing on the site stats today. I check from time to time since I like to know where traffic is coming from.
1755878575453.webp

The KF referral is expected, but the Microsoft Teams one? Either someone shared the website in their workplace OR...the UK Government famously uses Teams and Microsoft products in general. Am I under investigation now?

:story:
 
There's 35 migrants apparently heading to Mold very soon.

They'll be held in the same building, but locals aren't happy.

@he who has thus come/gone In 'Gog' Land ('Gog' meaning North) there's a fair few things and places of interest:

Anglesey and Bardsey Island
Portmeirion (famous for 'The Prisoner)
Llandudno (the birthplace of 'Alice In Wonderland')
Conwy (famous for its Castle and also Drew Pritchard from Salvage Hunters)
Bleanau Ffestiniog (plus the Welsh Highland Narrow Gauge Railway)
Llangollen
and of course... Wrexham (famous for Deadpool FC).
I visited Rhyl a while back for work and I think even migrants would find it too bleak.

As a joke I took a bunch of photos by the seaside during my stay and posted them on my socials with some pictures of chernobyl mixed in. No one noticed.
 
The most insane thing is that while looking for crimes committed by migrants is there are more news stories saying migrant crime is not a problem than actual crimes reported. More articles whinging about "hate crimes".
 
Is there an open directory of UK arrests like in the U.S. here?
1757113097756.webp

Seems like a pretty good indicator of who is being arrested.
 
Is there an open directory of UK arrests like in the U.S. here?
View attachment 7875777
Seems like a pretty good indicator of who is being arrested.
Arrests? No. The police usually put out statements like: "A 52 year old man was arrested at 10am today under suspicion of...". They did this for the recent Linehan arrest and the Canary Wharf shit that went down where the migrant went into some woman's house.

They don't officially issue the name until someone is charged with a crime (sometimes this doesn't even happen), usually, mostly to avoid someone's name being ruined if they didn't actually commit the crime.

If a migrant does a cheeky little rape, from the point of the arrest up to the charge up to a trial, names don't always leak. It usually does but sometimes they just don't. This makes it insanely hard to actually find something like the image you've posted so a lot of the reporting comes off the back of news articles as news reporters are allowed access into court buildings most of the time.
 
Elon Musk made another overly dramatic tweet about the UK linking to a Daily Mail article about a map of migrant crime. I thought it might have been this, but the site seems down now (:_(
Hey, yeah, so the host had an issue with the site and were very difficult to get a hold of. Pair that with a new job I've started and I struggled to get it back up.

I've got a raw SQL database backup of about a week before it went down if anyone wants a look or wants to use the data, please feel free:
 

Attachments

Back
Top Bottom