中国人口贩卖数据爬取教程与分析报告

文摘   2024-01-30 16:43   中国香港  

    预告:详细数据分析和代码在文末,希望能够把这份数据扩散出去,真正帮助那些丢失孩子的家庭。

    事情的开始是这样的,前几天看到群里有朋友分享尧大的研究,用到了人口拐卖数据。我其实这两年都在关注这个话题,目前大部分人口拐卖是用的宝贝回家网的数据,我恰好有一份更高质量的全国尺度的包含妇女贩卖,人口贩卖,等不单单是婴幼儿拐卖的数据,想做点大尺度的综合类的研究分析,所以就在群里提到了这个。大家听说有这里有大傻子来用爱发电爬数据,脸上纷纷漏出了白嫖的喜悦,纷纷回应。

    我耳根子比较软,在群友的一声声轻声细语中很快败下阵来,承诺将会提供一份数据出来,也就是大家用的很广的“宝贝回家”数据,这份数据大家做简单分析应该是够了。如果想分析的更深入细致,可以一起做更高质量的其他来源的数据哦。宝贝回家的数据18年武大资环的一位老师就用来做了研究,并发在了nature sustainability上,被编辑选为feature study(亮点研究)。

    其实方法再简单不过了,就是把发布地点和被拐地点做个OD,然后复杂网络一套就完事了,如下图。

    这套数据链接是:www.baobeihuijia.com/bbhj,相当多的寻亲信息。

    随便点进去一个,看到详细的寻亲信息。每一条都是血淋漓的家庭悲剧,可恶的人贩子啊。

    其实数据都是公开的抓取非常简单,我花了一个小时写了以下代码,递增页面的索引,最多1147页,平均每页50个孩子,登记了约5万名被拐儿童信息,而真实的被拐数字恐怕是十倍不止。

    随机提取部分数据进行简单的数据统计,可以看到其实相当一部分儿童不是拐卖而是送出去了,现在原生父母想要重新找到,哎,早知如此何必当初呢?

    看下男女比例,再次哑然。

    被拐的孩子出生日期以及被拐时间主要集中在1990年。这种情况新世纪后才得以好转,小时候大人说不要乱跑,容易被人贩子拐走所言非虚啊。

    大家回复宝贝回家获取数据,附上数据爬取的代码,仅供学习,不要自己一直开爬虫防止对服务器干扰,影响那些真正需要想找回孩子的人:

import requestsfrom bs4 import BeautifulSoupimport csvdef extract_person_info(person_div):    href = person_div.find('a', target='_blank')['href']    img_src = person_div.find('img', class_='img-fluid')['src']    label = person_div.find('span', class_='badge').get_text()    agent_info = person_div.find('div', class_='person-agent-info')    agent_name = agent_info.find('a')['href']    registration_date = agent_info.find('span', class_='d-block').get_text()    return {        'href': href,        'img_src': img_src,        'label': label,        'agent_name': agent_name,        'registration_date': registration_date    }def extract_registration_info(soup):    registration_info = soup.find('div', class_='pagecontent')    if registration_info:        registration_data = {}        for item in registration_info.find_all('li'):            key = item.find('div', class_='view-th').text.strip()            value = item.find('div', class_='view-td').text.strip()            # Correcting the format for "失踪地点" field            if '失踪地点' in key:                value = key.split(':')[-1]                key = '失踪地点:'            registration_data[key] = value        return registration_data    else:        print("Registration information not found.")        return Nonedef scrape_page(page_number):    url = f'https://www.baobeihuijia.com/bbhj/channels/3_{page_number}.html'    html_content = requests.get(url).content.decode('utf-8')    soup = BeautifulSoup(html_content, 'html.parser')    person_divs = soup.find_all('div', class_='person-image')    for person_div in person_divs:        person_info = extract_person_info(person_div)        result_url = 'https://www.baobeihuijia.com' + person_info['href']        result_html_content = requests.get(result_url).content.decode('utf-8')        result_soup = BeautifulSoup(result_html_content, 'html.parser')        registration_data = extract_registration_info(result_soup)        if registration_data:            with open('宝贝回家3.csv', 'a', encoding='utf-8', newline='') as f:                csv_writer = csv.writer(f)                csv_writer.writerow(registration_data.values())with open('宝贝回家3.csv', 'w', encoding='utf-8', newline='') as f:        f.write("Title,寻亲类别:,失踪类型:,寻亲编号:,姓名:,性别:,出生日期:,失踪时身高:,失踪时间:,失踪地点,失踪者特征描述:,其他资料:,注册时间:,跟进志愿者:")        f.write("\n")# Iterate over pages from 2 to 5for page_number in range(2, 200):    scrape_page(page_number)

    其实除了儿童拐卖外,妇女贩卖也是非常严重的事情,我们使用另外的数据源,绘制了中国妇女拐卖多发的城市,其中与缅甸越南的边界是高发区域。大家如果感兴趣可以一起完成这个工作。

城市感知计算
认识世界和改造世界,张岩博士和志愿者团队搭建的非盈利城市科学分享平台,欢迎加好友学术交流。
 最新文章