[爬虫技术]如何爬虫豆瓣网站的电影信息
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