何谓爬虫,源自某百科:

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
爬虫怎么实现,这是一个好问题,N多年前,google的spider机器人就是一个超级的爬虫程序,这个爬虫机器人游走于全世界的网页之中,分析并归纳这些网页的关联,并且拥有自我学习能力,能够自动更新爬虫策略,以最优方式进行爬虫。 爬虫语言选取,目前主流的爬虫语言是ruby、perl、python以及全世界最好的语言php。

我个人比较喜欢用的语言就是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年,那时候绝大数人填不饱肚子;

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