[爬虫技术]如何爬虫豆瓣网站的电影信息

Posted 每日记事本

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[爬虫技术]如何爬虫豆瓣网站的电影信息相关的知识,希望对你有一定的参考价值。

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


[爬虫技术]如何爬虫豆瓣网站的电影信息

爬虫怎么实现,这是一个好问题,N多年前,google的spider机器人就是一个超级的爬虫程序,这个爬虫机器人游走于全世界的网页之中,分析并归纳这些网页的关联,并且拥有自我学习能力,能够自动更新爬虫策略,以最优方式进行爬虫。
爬虫语言选取,目前主流的爬虫语言是ruby、perl、python以及全世界最好的语言php
我个人比较喜欢用的语言就是python,第三方库特别多,支持多线程,代码少(人生苦短,我选python)
今天我们实现的代码是爬虫豆瓣的电影数据库,有点难度,非常具有挑战性,编程小白可以忽略此贴
材料需求:
环境搭建:python3语言环境(然而我为什么选择3,参见此教程http://www.runoob.com/python/python-2x-3x.html
第三方库支持: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年,那时候绝大数人填不饱肚子;
希望大家也多能挖掘出来一些数据,谢谢!代码被编辑器转义了,大家复制代码时候注意下。。。

[爬虫技术]如何爬虫豆瓣网站的电影信息

本文整理自网络,如有侵权请联系删除!

长按下图二维码即可识别关注和阅读历史文章!

你的关注是小编继续前进的动力!



以上是关于[爬虫技术]如何爬虫豆瓣网站的电影信息的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫实战(1)requests爬取豆瓣电影TOP250

Python爬虫入门 | 爬取豆瓣电影信息

Java豆瓣电影爬虫——小爬虫成长记(附源码)

团队-张文然-需求分析-python爬虫分类爬取豆瓣电影信息

如何应对反爬虫技术?

团队-张宸-需求分析-python爬虫分类爬取豆瓣电影