何谓爬虫,源自某百科:


2222.jpg


网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

爬虫怎么实现,这是一个好问题,N多年前,google的spider机器人就是一个超级的爬虫程序,这个爬虫机器人游走于全世界的网页之中,分析并归纳这些网页的关联,并且拥有自我学习能力,能够自动更新爬虫策略,以最优方式进行爬虫。

爬虫语言选取,目前主流的爬虫语言是ruby、perl、python以及全世界最好的语言php。


1111.jpg


我个人比较喜欢用的语言就是python,第三方库特别多,支持多线程,代码少(人生苦短,我选python)
今天我们实现的代码是爬虫豆瓣的电影数据库,有点难度,非常具有挑战性,编程小白可以忽略此贴

材料需求:

环境搭建:python3语言环境(不懂的百度)

第三方库支持:re、request、bs4、time、pymysql

数据库支持:mysql数据库社区版

代码如下+++++++++++++++++++++++++++++++++++++++

# -*- coding:utf8 -*-

#首先用于确定编码,加上这句

import pymysql

import requests

import re

from time import sleep

from bs4 import BeautifulSoup

global tagname

tagname="1961"

baseUrl = "https://movie.douban.com/tag/"+tagname+"?start=%d&type=T"

def get_movies(start):
    url = baseUrl % start
    lists = []
    proxies = {
        "http": "127.0.0.1:1086",
        "https": "127.0.0.1:1086",
    }
    html = requests.get(url,proxies=proxies)
    soup = BeautifulSoup(html.content, "html.parser")
    items = soup.find_all("tr","item")
    for i in items:
        movie = {}
        movie["rank"] = "0"
        movie["link"] = i.find("a","nbg").get("href")
        movie["mdirecter"]=str(i.find("p", "pl").text)
        movie["poster"] = i.find("a","nbg").find("img").get("src")
        movie["name"] = i.find("a","nbg").find("img").get("alt")
        movie["score"] = i.find("span", "rating_nums").text if(i.find("span", "rating_nums")) else "(暂无评分)"
        movie["quote"] = i.find("span", "inq").text if(i.find("span", "inq")) else "(暂无简介)"
        # print(movie)
        lists.append(movie)
    return lists

if __name__ == "__main__":
    db =

pymysql.connect(host="localhost",user="root",password="123456",db="app_movie",charset="utf8")

#兄台,此处要替换成你自己安装mysql设置的用户名、密码
   cursor = db.cursor()
    # cursor.execute("DROP TABLE IF EXISTS MyBlog_dbmovie")
    # createTab = """CREATE TABLE MyBlog_dbmovie(
    #      id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    #      mname VARCHAR(20) NOT NULL,
    #      myear VARCHAR(8),
    #      mlist VARCHAR(4),
    #      mlink VARCHAR(50) NOT NULL,
    #      mimage VARCHAR(100) NOT NULL,
    #      mrnum VARCHAR(4),
    #      mdescr VARCHAR(50),
    #      mnp VARCHAR(4),
    #      mdirecter VARCHAR(500),
    #      timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    #  )"""
    # cursor.execute(createTab)
    start = 0
    while (start < 1020):
        lists = get_movies(start)
        for i in lists:
            sql = "INSERT INTO `MyBlog_dbmovie` (`mname`, `myear`, `mdirecter`, `mimage`, `mlink`, `mrnum`, `mlist`, `mnp`, `mdescr`) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)"
            try:
                cursor.execute(sql, (i["name"], tagname, i["mdirecter"],i["poster"],i["link"] , i["score"], i["rank"],'', i["quote"]))
                db.commit()
                print("标签为"+tagname+",电影名为《"+i["name"]+"》信息...成功插入到数据库中")
            except:
                db.rollback()
        start += 20
        sleep(1)
    db.close()

关于代码的若干解释说明:+++++++++++++++++++++++++++
a,这里设置了一个全局变量tagname,但是更好的做法是将它变成一个list,这样你批量遍历从1888年

2017年的电影只需要6个小时(亲测);

b,代理,这里有条件一定要上代理(proxies可以是代理池),毕竟裸奔,呵呵,你懂的,

c,数据规模,以我的经验,目前全世界电影总的数量不超过5w部,所以成本不是很高。

一些有趣的数据,

统计了这些电影数据,告诉你们一些冷门的知识,

全世界拍的最多的电影是《黄飞鸿系列》,以黄飞鸿命名的84部,另外44部,黄飞鸿是主角,主演黄飞鸿最多的是关德兴老爷子,不是赵文卓也不是李连杰。

世界第一部电影诞生于1888年,然后十年后在法国流行起了小黄片生意(第八艺术源于基层);

香港从1926年开始电影工业起步,电影总量在2010年时候才被大陆超越。最经典的电影系列当属邵逸夫出品;

反思朝鲜战争的电影《猪排山》诞生于中国最困难的1958年,那时候绝大数人填不饱肚子;


0000.jpg


希望大家也多能挖掘出来一些数据,谢谢!代码被编辑器转义了,大家复制代码时候注意下。。。