爬蟲綜合大做業

本次做業要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159html

一.把爬取的內容用數據庫保存python

1.保存到sqlite3數據庫mysql

# 用pandas讀出以前保存的數據:
newsdf = pd.read_csv(r'D:\gzccnews.csv')

# 建立保存newsdf到表gzccnews
import sqlite3
with sqlite3.connect('gzccnewsdb.sqlite') as db:
    newsdf.to_sql('gzccnews',con=db)

# 查詢讀出保存到sqlite3數據庫的內容df2
with sqlite3.connect('gzccnewsdb.sqlite') as db:
    df2 = pd.read_sql_query('select * from gzccnews',con=db)
df2

運行示例:sql

2.保存到MySQL數據庫:數據庫

# 安裝須要用到的類包
!pip install PyMySQL
!pip install sqlalchemy 

# 導入類包鏈接MySQL數據庫(gzcc_news)
import pymysql
from sqlalchemy import create_engine
coninfo = "mysql+pymysql://root:@localhost:3306/gzcc_news?charset=utf8"
engine = create_engine(coninfo,encoding="utf-8")
# 把newsdf數據保存到gzcc_news數據庫新建表news上
newsdf.to_sql(name='news',con=engine,if_exists='append',index= False,index_label='id')

運行示例:瀏覽器

 

二.爬蟲綜合大做業cookie

  1. 選擇一個熱點或者你感興趣的主題。
  2. 選擇爬取的對象與範圍。
  3. 瞭解爬取對象的限制與約束。
  4. 爬取相應內容。
  5. 作數據分析與文本分析。
  6. 造成一篇文章,有說明、技術要點、有數據、有數據分析圖形化展現與說明、文本分析圖形化展現與說明。
  7. 文章公開發布。

原因app

想了好久,不知道本身感興趣的是什麼,而後就爬了下社會熱點話題和本身工做相關的東西。但最後限於技術不行,參考網上成功案例仍是報錯找不出哪裏,ip也被封了幾回。最後仍是倒回來爬取影評。dom

《無問西東》這部電影對我觸動很大,五一假期進行了三刷,其中有一幕記憶深入:學習

吳嶺瀾「 最好的學生都是學實科的。我只知道,這個年紀最重要的就是學習,何用管我學什麼。天天把本身交給書本,內心就以爲踏實。」

梅貽琦答他:「 你還忽略了一件事,真實。人把本身置身於忙碌當中,有一種麻木的踏實,但喪失了真實。」「 真實就是,你看什麼,作什麼,和誰在一塊兒,有一種從心靈深處滿溢出來的不懊悔、也不羞恥的平和與喜悅。」

讓我久久不能忘懷,有所共鳴又有所困惑。因此想着藉此爬取廣大網友的觀點作一次分析,多看看別人看這部電影的想法感覺,跳出自我,去尋找那麼迷茫和拿不定主意什麼才適合本身的方向。

爬取範圍

用python爬取用戶名、短評內容、觀看狀況、評分推薦、評論時間、贊同該評論次數解讀《無問西東》

# 導入須要用到的類包
import requests
from bs4 import BeautifulSoup
import time
import random
import pandas as pd

uas = [
    'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
    'Mozilla / 5.0(Linux;Android 6.0;  Nexus 5 Build / MRA58N) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 73.0 .3683.103Mobile  Safari / 537.36',
    'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10'
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'
]
# 隨機選取用戶代理
def get_ua():
    au = random.choice(uas)
    return au

# 抓取解析網頁
def get_soup(url):
    # 假裝瀏覽器發送請求
    headers = {
        'User-Agent': get_ua(),
        'Host': 'movie.douban.com',
        'Connection': 'keep-alive',
        'Cookie': 'll="118281"; bid=PDfyRYzWZUA; __utmz=30149280.1557146179.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); '
                  'gr_user_id=64e50650-eaac-439c-bf07-4845beda01f4; _vwo_uuid_v2=DCC7E0177B98EF36F009D20E376BAFAF0|af1541df8cba612ae9400c9868c99729; viewed="1291199";'
                  ' __yadk_uid=NZF4B0V65mFYDKwVEtBIqD7IzCfqBuCo; trc_cookie_storage=taboola%2520global%253Auser-id%3D1b6006bb-7d65-4a3d-9ef8-0bd85ef174e3-tuct363a7b2;'
                  ' __gads=ID=aa3da2d975e4bc28:T=1557291874:S=ALNI_Mb5dM0i_lKo5qiVEALC5SbsE4zAeg;'
                  ' __utmz=223695111.1557291909.3.2.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/search; _'
                  'pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1557365604%2C%22https%3A%2F%2Fwww.douban.com%2Fsearch%3Fq%3D%25E6%2597%25A0%25E9%2597%25AE%25E8%25A5%25BF%25E4%25B8%259C%22%5D;'
                  ' _pk_ses.100001.4cf6=*; __utma=30149280.574526707.1557146179.1557305660.1557365604.7; __utmc=30149280; __utma=223695111.1592700349.1557228376.1557305660.1557365604.6;'
                  ' __utmc=223695111; ap_v=0,6.0; __utmb=30149280.4.9.1557368405684; dbcl2="196202536:5ThcQT2Qzr0";'
                  ' ck=EL1Z; push_noty_num=0; push_doumail_num=0; ct=y; __utmt=1; _pk_id.100001.4cf6=627ae57bc2f4ade6.1557228376.6.1557369194.1557306413.; __utmb=223695111.19.10.1557365604'
               }
    res = requests.get(url, headers=headers)
    time.sleep(random.random()*5) #設置時間間隔,防止太快被封
    res.encoding='utf-8'
    soup = BeautifulSoup(res.text,'html.parser')
    return soup


# 獲取一頁用戶的評論
def getText(soup):
    comment_list = []
    for p in soup.select('.comment-item'):
        comment = {}
        username = p.select('.comment-info')[0]('a')[0].text
        watch = p.select('.comment-info')[0]('span')[0].text
        intro = p.select('.comment-info')[0]('span')[1]['title']
        cTime = p.select('.comment-time ')[0]['title']
        pNum = p.select('.votes')[0].text
        short = p.select('.short')[0].text
        text=short.replace('\n', ' ')
        comment['用戶名']=username
        comment['觀看狀況']=watch
        comment['評分推薦']=intro
        comment['評論時間']=cTime
        comment['短評內容']=text
        comment['贊同該評論次數']=pNum
        comment_list.append(comment)
    return comment_list

url = 'https://movie.douban.com/subject/6874741/comments?start={}&limit=20&sort=new_score&status=P'
comments = []
for i in range(1,50):
    soup = get_soup(url.format(i * 20)) # 每一頁20條評論需乘20來拼湊網頁
    comments.extend(getText(soup))
    time.sleep(random.random() * 5)
# # 測試爬出全部影評的概況
# for n in comments:
#     print(n)

# 保存到本地csv文件
commentFile = pd.DataFrame(comments)
commentFile.to_csv(r'D://comments1.csv', encoding='utf_8_sig')

 

爬取後的部分數據:

數據處理

# 從文件讀取待分析文本
with open(r'D:\\comments_analyse.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 使用jieba進行中文分詞
import jieba
textCut = jieba.lcut(text)

# 排除語法型詞彙,代詞、冠詞、連詞等停用詞
with open(r'D:\\學習\\stops_chinese.txt', 'r', encoding='utf-8') as f:
    stops = f.read().split('\n')
tokens = [token for token in textCut if token not in stops]

# 將文本轉化爲集合
words_set = set(tokens)
# 存入字典
words_dict = {}
for w in words_set:
    words_dict[w] = tokens.count(w)
# 字典轉換成列表對詞語進行詞頻排序
words_sort = list(words_dict.items())
words_sort.sort(key=lambda x: x[1], reverse=True)
# print(words_sort)
# for w in words_sort:
#     print(w)

import pandas as pd
pd.DataFrame(data=words_sort).to_csv(r'D:\\學習\\無問西東影評.csv',encoding='utf_8_sig')

詞頻統計:

  

 詞雲:

# 插入空格把詞語分開
wl_split=' '.join(tokens)
# 調用generate()方法生成詞雲
from wordcloud import WordCloud
mywc = WordCloud().generate(wl_split)
# 顯示詞雲
import matplotlib.pyplot as plt
plt.imshow(mywc)
plt.axis("off")
plt.show()

總結

 不知道哪裏出了問題,只爬取到大概300條左右的一小部分數據,感受沒有分析跟豆瓣總結出的結論沒有什麼太大的差別,因此只能算作是一個小練習並無太大的參考價值,之後還需更加努力學習。最後,總結下電影,嗯,想法各有不一樣,評論偏向中肯,戒驕戒躁,腳踏實地,才能仰望星空。

相關文章
相關標籤/搜索