天天看點

爬蟲綜合大作業

作業來源: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)

二.爬蟲綜合大作業

  1. 選擇一個熱點或者你感興趣的主題。
  2. 選擇爬取的對象與範圍。
  3. 了解爬取對象的限制與限制。
  4. 爬取相應内容。
  5. 做資料分析與文本分析。
  6. 形成一篇文章,有說明、技術要點、有資料、有資料分析圖形化展示與說明、文本分析圖形化展示與說明。
  7. 文章公開釋出。

爬取目标:爬取豆瓣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分,看來大家還是比較喜歡看犯罪類型的電影去尋求一些刺激。