通过PYTHON爬虫爬取明星的照片和资料

  • 一.准备工作
  • 1.选择合适的网站
  • 2.安装MongoDB数据库
  • 3.导入依赖库
  • 二.开始爬虫


一.准备工作

1.选择合适的网站

这次爬虫的目的,是为了为人脸识别项目提供足量的数据集。所以要求目标网站必须符合:

  1. 明星信息齐全(至少包含正脸照片和姓名)
  2. 网站结构简洁,利于格式化爬取。

通过不断的排查,最终锁定粉丝网。随手打开一位明星

利用python爬取同一个经营业务类型的公司名单 用python爬取一个人所有信息_数据

发现信息齐全,并且域名非常有规律,只要改变s后面的数字,即可分分钟爬取成千上万的数据,就决定是你了!

2.安装MongoDB数据库

这么大量的数据需要用数据库来合理的储存,我们选择MongoDB来进行,因为它上手简单并且可以使用Python中的pymongo库操作。

安装过程请教百度喔

安装完成后我们选择robo 3T来可视化我们的数据库,界面如下:

利用python爬取同一个经营业务类型的公司名单 用python爬取一个人所有信息_数据库_02

非常的简洁明了!

3.导入依赖库

import requests
import sys
import re  #用于正则化操作
from lxml import etree
#上述用于爬虫
import pymongo as pm    #链接mongoDB

二.开始爬虫

首先我们链接数据库

client = pm.MongoClient()
db = client['face']   #访问数据库
collection = db['my_face']  #访问表

如果数据库和表不存在则会自动创建

接着我们构建请求头,来躲过网站的反爬虫机制。

headers = {'Referer':'https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index',
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
          }
for j in range(1,5000):
    content1 = requests.get('http://star.ifensi.com/s{}/'.format(j),headers=headers).text
    # print(content1)
    root1 = etree.HTML(content1)
    # print(root1)
    href1 = root1.xpath('//div[@class="hbox clearfix"]/div[@class="hd_1"]/img') #定位到img标签
   
    name = root1.xpath("//h1[@class='t1']/text()") #获得明星的名字        
    birth = root1.xpath("//p[@class='t2'][1]//text()") #获得明星的身高和生日       
    data = {}    
    try:
        data["name"] = name[0] #这一步是为了排除无法访问的网站,如果网站无法访问直接进入下一循环
    except:
        continue
    data["id"] = j
    for i in range(len(birth)):
       
        birth[i] = birth[i].replace("\xa0","")   #去空格
        hanzi,number = re.findall('(.*):(.*)',birth[i])[0] #分别提取出key和value
        data[hanzi] = number  #在字典中创建键值对
        
    img_url = href1[0].attrib["src"]   #获取图片的url
    
    response = requests.get(img_url,headers=headers)
    
    img = response.content
    with open( 'faces/{}.jpg'.format(j),'wb' ) as f:
        f.write(img)           #将图片保存到faces文件夹
    data["path"] = 'faces/{}.jpg'.format(j)  #保存相对路劲
    
    collection.insert_one(data) #将字典插入到表中

正式开始爬虫操作,需要先在当前目录下创建faces文件夹,获得的明星照片会保存在这个目录。我们期望获得5000位明星的数据。

代码将在数据库中写入以下4个数据:

  • ID(与保存的图片序号一致)
  • 明星姓名
  • 明星身高
  • 明星生日
  • 该明星照片的相对路径

利用python爬取同一个经营业务类型的公司名单 用python爬取一个人所有信息_mongodb_03


利用python爬取同一个经营业务类型的公司名单 用python爬取一个人所有信息_mongodb_04


大功告成!