爬虫综合大作业
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075
一.把爬取的内容保存取MySQL数据库
- import pandas as pd
- import pymysql
- from sqlalchemy import create_engine
- conInfo = "mysql+pymysql://user:passwd@host:port/gzccnews?charset=utf8"
- engine = create_engine(conInfo,encoding='utf-8')
- df = pd.DataFrame(allnews)
- df.to_sql(name = ‘news', con = engine, if_exists = 'append', index = False)
二.爬虫综合大作业
- 选择一个热点或者你感兴趣的主题。
- 选择爬取的对象与范围。
- 了解爬取对象的限制与约束。
- 爬取相应内容。
- 做数据分析与文本分析。
- 形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。
- 文章公开发布。
爬取目标:爬取豆瓣top250的电影
豆瓣top250的网页结构:
可以看出该网页的数据是分别以item,info,bd,star..等等来命名的class
所以我们可以通过class爬取他们的属性
代码如下:
# -*- coding: utf-8 -*- import requests from lxml import etree if __name__ == '__main__': ranks=[] names=[] directors=[] types=[] juqing=[] stars=[] dd=[] gg=[] people=[] grades=[] quotes=[] numbers=['0','25','50','75','100','125','150','175','200','225'] for number in numbers: url = 'https://movie.douban.com/top250?start={}&filter='.format(number)#实现翻页功能 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" } req = requests.get(url = url,headers = headers) req.encoding = 'utf-8' html = req.text html1=etree.HTML(html) rank=html1.xpath('//div[@class="item"]/div/em/text()')#x-path地址并获取文字 for rank1 in rank: ranks.append(rank1) name=html1.xpath('//div[@class="info"]/div[1]/a/span[1]/text()') for name1 in name: names.append(name1) director=html1.xpath('//div[@class="bd"]/p[1]/text()') for director1 in director: directors.append(director1) people1=html1.xpath('//div[@class="star"]/span[4]/text()') for people2 in people1: people.append(people2) grade=html1.xpath('//div[@class="star"]/span[@class="rating_num"][@property="v:average"]/text()') for grade1 in grade: grades.append(grade1) quote=html1.xpath('//p[@class="quote"]/span/text()') for quote1 in quote: quotes.append(quote1) for i in directors: gg.append(i.strip()) for k in gg: dd.append("".join(k.split())) for q in range(25): juqing.append(dd[2*q-1]) for q in range(25): stars.append(dd[2*q]) import pandas as pd #字典中的key值即为csv中列名 columns1= ['豆瓣排名','电影名','剧情','导演/主演','评分','评价人数','queto']#csv会按首字母进行排序,所以加表格自己排序 dataframe = pd.DataFrame({'豆瓣排名':ranks,'电影名':names,'剧情':juqing,'导演/主演':stars,'评分':grades,'评价人数':people,'queto':quotes}) #dataframe = pd.DataFrame({'类型':types}) #将DataFrame存储为csv,index表示是否显示行名,default=True dataframe.to_csv("豆瓣电影top250.csv",encoding="utf_8_sig",index=False,columns=columns1)
生成的CSV文件
文件分析:
1. 可以看出剧情类的电影在TOP250中的数量是最多的,也就是说比较多人偏向纯剧情类型的电影,还有20部电影是剧情音乐类型的,也是会有挺多人的喜欢看得
2. 犯罪剧情奇幻悬疑,剧情爱情家庭,战争西部片,比较少好的电影,也比较少人看,也有部分的喜剧类电影比较少人看,比如犯罪类型和家庭类喜剧。
3. 从上图也可以看出来在1994年的电影占豆瓣TOP250比较多的比例,一共32部电影入选。1975和1991年就比较少了,只有1部电影,13和15年亦是如此只有一部电影可以进入豆瓣TOP250
4. 从上图可以分析得出,在豆瓣TOP250中,美国的电影是占了大部分的,250部电影里就有105部电影,可以说美国在电影产业是遥遥领先的,而中国总共只有30部电影榜上有名,看来中国的电影产业有待发展
5. 美国在1994年,电影行业迅速发展,一下子有22部电影可以进入豆瓣YOP250。而在中国台湾就比较惨淡了,只有一部电影可以进入豆瓣TOP250。在1994年之后全球的电影又回到平平淡淡的时期了
6. 我们从所有的评分人数统计可以看出,大多数人会是比较中肯,都会评价8.7或者8.8 分,而且越往两边就人数越少。
7. 犯罪类型和喜剧类型收获过最高分9.6分,看来大家还是比较喜欢看犯罪类型的电影去寻求一些刺激。