天天看點

爬蟲綜合大作業

可以用pandas讀出之前儲存的資料:

newsdf = pd.read_csv(r'F:\duym\gzccnews.csv')

一.把爬取的内容儲存到資料庫sqlite3

import sqlite3

with sqlite3.connect('gzccnewsdb.sqlite') as db:

newsdf.to_sql('gzccnews',con = db)

df2 = pd.read_sql_query('SELECT * FROM gzccnews',con=db)

import pandas as pd
import pymysql
from sqlalchemy import create_engine
conInfo = "mysql+pymysql://user:@localhost:3306/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)
        

儲存到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)
import pandas as pd
import pymysql
from sqlalchemy import create_engine
conInfo = "mysql+pymysql://root:@localhost:3306/yaoshen?charset=utf8"
engine = create_engine(conInfo,encoding='utf-8')
df = pd.DataFrame(comment)
print(df)
df.to_sql(name ='pinglun', con = engine, if_exists = 'append', index = False)
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='', db='yaoshen', charset='utf8')        

二.爬蟲綜合大作業

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

爬蟲主題:

爬取對象:bilibili(https://www.bilibili.com/)

爬蟲綜合大作業

 爬取對象的限制與限制:

通過以下方法避免被封ip:

設定合理的user-agent,模拟成真實的浏覽器去提取内容。

首先打開浏覽器輸入:about:version。

使用者代理:

收集一些比較常用的浏覽器的user-agent放到清單裡面。

然後import random,使用随機擷取一個user-agent

定義請求頭字典headers={’User-Agen‘:}

發送request.get時,帶上自定義了User-Agen的headers

 爬取内容:

爬取了影評的使用者名、時間、評論、有用數

爬蟲綜合大作業

代碼如下:

import urllib.request
import requests
from bs4 import BeautifulSoup
def getHtml(url):
    """擷取url頁面"""
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
    req = urllib.request.Request(url,headers=headers)
    req = urllib.request.urlopen(req)
    content = req.read().decode('utf-8')
    return content
def getComment(url):
        """解析HTML頁面"""
        html = getHtml(url)
        soupComment = BeautifulSoup(html, 'html.parser')
        onePageComments = []
        for comment in soupComment.select('.comment-item'):
            card = {}
            card['使用者名'] = comment.select('.comment-info')[0].select('a')[0].text
            card['時間'] = comment.select('.comment-time')[0].text.lstrip().rstrip()
            card['評論'] = comment.select('.short')[0].text
            card['有用數'] = comment.select('.votes')[0].text
            onePageComments.append(card)
        return onePageComments
comment = []
if __name__ == '__main__':
     f = open('我不是藥神page10.txt', 'w', encoding='utf-8')
     for page in range(10): # 豆瓣爬取多頁評論需要驗證。
         url = 'https://movie.douban.com/subject/26752088/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'
         print('第%s頁的評論:' % (page+1))
         print(url + '\n')
         comment.extend(getComment(url))
         print(comment)
         for i in range(len(comment)):
             f.write(comment[i]['評論'])
         print('\n')
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from scipy.misc import imread
import jieba
text = open("我不是藥神page10.txt","rb").read()
#結巴分詞
wordlist = jieba.cut(text,cut_all=True)
wl = " ".join(wordlist)
#print(wl)#輸出分詞之後的txt
#把分詞後的txt寫入文本檔案
#fenciTxt  = open("fenciHou.txt","w+")
#fenciTxt.writelines(wl)
#fenciTxt.close()
#設定詞雲
wc = WordCloud(background_color = "white", #設定背景顔色
               mask = imread('shen.jpg'), #設定背景圖檔
               max_words = 2000, #設定最大顯示的字數
               stopwords = ["的", "這種", "這樣", "還是", "就是", "這個"], #設定停用詞
               font_path = "C:\Windows\Fonts\simkai.ttf", # 設定為楷體 正常
# #設定中文字型,使得詞雲可以顯示(詞雲預設字型是“DroidSansMono.ttf字型庫”,不支援中文)
               max_font_size = 60, #設定字型最大值
               random_state = 30, #設定有多少種随機生成狀态,即有多少種配色方案
 )
myword = wc.generate(wl)#生成詞雲
wc.to_file('result.jpg')
# 展示詞雲圖
plt.imshow(myword)
plt.axis("off")
plt.show()

import pandas as pd
import pymysql
from sqlalchemy import create_engine
conInfo = "mysql+pymysql://root:@localhost:3306/yaoshen?charset=utf8"
engine = create_engine(conInfo,encoding='utf-8')
df = pd.DataFrame(comment)
print(df)
df.to_sql(name ='pinglun', con = engine, if_exists = 'append', index = False)
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='', db='yaoshen', charset='utf8')
      

  

 詞雲顯示如下:

爬蟲綜合大作業

總結:

《我不是藥神》這部電影主要講了平凡的神油店老闆程勇,在機緣巧合下成為印度仿制藥“格列甯”代理商的故事,通過描述程勇與“格列甯”之間的“糾葛”,反映了當時慢粒白血病患者“治病貴、天價藥”社會現狀。影評的評價極高,與9.0的豆瓣評分相符合,引發人們深刻思考,值得觀看。