爬蟲綜合大做業

爬蟲綜合大做業

做業要求來自於:html

一.把爬取的內容保存取MySQL數據庫mysql

import pandas as pdsql

import pymysql數據庫

from sqlalchemy import create_engine瀏覽器

conInfo = "mysql+pymysql://user:passwd@host:port/gzccnews?charset=utf8"app

engine = create_engine(conInfo,encoding='utf-8')運維

df = pd.DataFrame(allnews)dom

df.to_sql(name = 'news', con = engine, if_exists = 'append', index = False)大數據

二.爬蟲綜合大做業網站

選擇一個熱點或者你感興趣的主題。

選擇爬取的對象與範圍。

瞭解爬取對象的限制與約束。

爬取相應內容。

作數據分析與文本分析。

造成一篇文章,有說明、技術要點、有數據、有數據分析圖形化展現與說明、文本分析圖形化展現與說明。

文章公開發布。

三.爬蟲注意事項

1.設置合理的爬取間隔,不會給對方運維人員形成壓力,也能夠防止程序被迫停止。

import time

import random

time.sleep(random.random()*3)

2.設置合理的user-agent,模擬成真實的瀏覽器去提取內容。

首先打開你的瀏覽器輸入:about:version。

用戶代理:

收集一些比較經常使用的瀏覽器的user-agent放到列表裏面。

而後import random,使用隨機獲取一個user-agent

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

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

3.須要登陸

發送request.get時,帶上自定義了Cookie的headers

headers={'User-Agen':

'Cookie': }

4.使用代理IP

經過更換IP來達到不斷高 效爬取數據的目的。

headers = {

"User-Agent": "",

}

proxies = {

"http": " ",

"https": " ",

}

response = requests.get(url, headers=headers, proxies=proxies)

正文:

1、爬取的網站:中國傳媒大學南廣學院

爬取範圍:中國傳媒大學南廣學院的新聞

爬取要求:對新聞信息進行詞雲分析,新聞時間與事件點擊量排序,詞頻統計。

 

2、詳細爬取過程:

1.首先須要對每一個新聞頁面信息的爬取:alist

代碼以下:

 

def alist(url):
    '''
    獲取頁面的各類新聞,而後逐條進入
    :param url: listUrl
    :return: newsList
    '''
    res=requests.get(listUrl)
    res.encoding='utf-8'
    soup = BeautifulSoup(res.text,'html.parser')
    newsList=[]
    for news in soup.select('li'):#獲取li元素
        if len(news.select('.text-list'))>0:#若是存在新聞題目
            newsUrl = news.select('a')[0]['href']#獲取新聞的連接
            newsDesc = news.select('span')[0].text#獲取時間
            newsDict = anews(newsUrl)#經過進入連接獲取詳細信息
            newsDict['time'] = newsDesc
            newsList.append(newsDict)#把每一個新聞的信息放進字典擴展到列表裏
    return newsList

 

2.而後再獲取新聞頁面的url進入新聞詳細頁面,對新聞詳細頁面信息的爬取:anews

代碼以下:

 

def anews(url):
    '''
    進入後爬取主要內容
    :param url: url
    :return: newsDetail
    '''
    newsDetail = {}
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text,'html.parser')
    newsDetail['newsTitle'] = soup.select('.zw-title h2')[0].text#題目
    newsDetail['newsClick'] = soup.select('.liulan')[0].text  # 點擊次數
    a = len(soup.select('.zw-text p'))#獲取存放內容的p標籤
    c = ""#後面用來進行每一個p標籤的內容相加
    for i in range(0,a):#獲取每一個p標籤的文本內容
        if soup.select('.zw-text p')[i].text != "\n\n":#剔除空內容
            b = ( soup.select('.zw-text p')[i].text)
            c = c+b#文本內容銜接
    newsDetail['newstext'] = c#將文本內容放進字典
    return newsDetail

 

3.對新聞新信息進行簡單數據處理:更新時間與點擊量的排序

代碼以下:

 

newsdf = pd.DataFrame(allnews)
print(newsdf)
print(newsdf.sort_values(by=['time'],ascending=False))#按更新時間降序排列
print(newsdf.sort_values(by=['newsClick'],ascending=False))#按點擊量降序排列

 

4.對新聞文本信息進行數據清洗

代碼以下:

 

# 加載停用詞表
    stopwords = [line.strip() for line in open('stops_chinese1.txt', encoding='utf-8').readlines()]
    # 分詞
    zhuanhua = str(allnews)#將字典轉化爲string格式
    wordsls = jieba.lcut(zhuanhua)
    wcdict = {}
    for word in wordsls:
        # 不在停用詞表中
        if word not in stopwords:
            # 不統計字數爲一的詞
            if len(word) == 1:
                continue
            else:
                wcdict[word] = wcdict.get(word, 0) + 1

 

5.對文本信息進行詞頻排序:

代碼以下:

 

wcls=list(wcdict.items())
wcls.sort(key=lambda x:x[1],reverse=True)
#輸出詞頻最大TOP20
for i in range(20):
    print(wcls[i])

 

6. 生成詞雲

代碼以下:

cut_text = " ".join(wcdict)#join返回經過指定字符鏈接序列中元素後生成的新字符串
mywc = WordCloud(font_path = 'msyh.ttc').generate(cut_text)
plt.imshow(mywc)
plt.axis("off")
plt.show()

 

7. 設置合理的爬取間隔

代碼以下:

 

 for i in range(3):
     print(i)
     time.sleep(random.random()*3)#沉睡隨機數的3倍秒數

 

8. 保存到csv與sql文件

代碼以下:

newsdf.to_csv(r'F:\做業\大三下\大數據\homework8\cucn.csv',encoding='utf_8_sig')#保存成csv格式,爲避免亂碼,設置編碼格式爲utf_8_sig

with sqlite3.connect(r'F:\做業\大三下\大數據\homework8\cucnsql.sqlite') as db:#保存文件爲sql
    newsdf.to_sql('gzccnewsdb',db)

 

3、運行截圖:

 

詞雲生成以下圖所示:

 

保存成csv文件截圖:

相關文章
相關標籤/搜索