做業要求來自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159html
能夠用pandas讀出以前保存的數據:見上次博客爬取所有的校園新聞並保存csvpython
newsdf = pd.read_csv(r'F:\duym\gzccnews.csv')mysql
一.把爬取的內容保存到數據庫sqlite3sql
import sqlite3
with sqlite3.connect('gzccnewsdb.sqlite') as db:
newsdf.to_sql('gzccnews',con = db)數據庫
with sqlite3.connect('gzccnewsdb.sqlite') as db:
df2 = pd.read_sql_query('SELECT * FROM gzccnews',con=db)瀏覽器
保存到MySQL數據庫微信
成功保存:app
1 newsdf = pd.read_csv(r'C:\Users\Czc\PycharmProjects\news.csv') 2 3 import sqlite3 4 ''' 5 with sqlite3.connect('gzccnewsdb.sqlite') as db: 6 newsdf.to_sql('gzccnews',con = db) 7 ''' 8 with sqlite3.connect('gzccnewsdb.sqlite') as db: 9 df2 = pd.read_sql_query('SELECT * FROM gzccnews',con=db) 10 11 12 import pymysql 13 from sqlalchemy import create_engine 14 coninfo = "mysql+pymysql://root:@localhost:3306/gzccnews?charset=utf8" 15 engine = create_engine(coninfo,encoding="utf-8") 16 17 newsdf.to_sql(name='news',con=engine,if_exists='append',index= False,index_label='id')
二.爬蟲綜合大做業運維
參考:dom
爬了一下天貓上的Bra購買記錄,有了一些羞羞噠的發現...
Python作了六百萬字的歌詞分析,告訴你中國Rapper都在唱些啥
分析了42萬字歌詞後,終於搞清楚民謠歌手唱什麼了
十二星座的真實面目
唐朝詩人之間的關係究竟是什麼樣的?
中國姓氏排行榜
三.爬蟲注意事項
1.設置合理的爬取間隔,不會給對方運維人員形成壓力,也能夠防止程序被迫停止。
2.設置合理的user-agent,模擬成真實的瀏覽器去提取內容。
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)
python大做業之--使用python爬取微信好友
01 準備工做
運行平臺:Windows 10
Python版本:Python3.7
首先登錄python版本微信itchat,生成二維碼掃描登錄獲取微信好友列表
而後統計好友男女數量並打印輸出
接着使用matplotlib繪圖
輸出結果能夠個人微信好友男女比例大概五五開,即便是在男女37開的學校,說明我微信裏的女生數比較少,有待增強。
接着獲取微信好友的信息
統計好友所在城市信息並繪圖輸出
輸出結果能夠看出廣州的好友佔了大多數,由於是在廣州上的大學,因此身邊大多數都是廣州的吧,還有比較多的城市的就是汕尾了,由於老家在汕尾,因此汕尾的人數也達到了45,緊接着就深圳等大城市了。
根據獲取到的微信好友個性簽名畫詞雲
輸出結果能夠看出我微信好友的個性簽名比較勵志正常的,像努力,時間,開心,本身,平安等,另外廣商也是一大特徵。
完整代碼:
1 # -*- coding: utf-8 -*- 2 3 import numpy as np 4 import itchat 5 import matplotlib.pyplot as plt 6 # 登陸微信,會彈出二維碼,用手機微信掃一掃便可登陸 7 itchat.login() 8 # 獲取好友的全部數據 9 friends = itchat.get_friends(update=True)[0:] 10 11 # ***-----統計好友性別比例-----*** 12 # 初始化計數器 13 male = female = other = 0 14 # friends[0]是本身的信息,所以從friends[1]開始 15 for i in friends[1:]: 16 sex = i['Sex'] 17 if sex == 1: 18 male += 1 19 elif sex == 2: 20 female += 1 21 else: 22 other += 1 23 # 計算朋友總數 24 total = len(friends[1:]) 25 # 打印輸出好友性別比例 26 print( 27 "男性好友: %.2f%%" % (float(male)/total * 100) + "\n" + 28 "女性好友: %.2f%%" % (float(female)/total * 100) + "\n" + 29 "不明性別好友: %.2f%%" % (float(other)/total * 100) 30 ) 31 32 33 # 進行繪圖 34 label_name = ["Boy", "Girl", "Unknown"] 35 gender_list = [male, female, other] 36 plt.figure() 37 plt.bar(range(len(gender_list)), gender_list, tick_label=label_name) 38 39 # 繪圖中文顯示設置 40 plt.rcParams['font.sans-serif']=['SimHei'] 41 plt.rcParams['axes.unicode_minus']=False 42 43 plt.xlabel(u'性別') 44 plt.ylabel(u'人數') 45 plt.title(u'好友性別比例') 46 47 # 在柱狀圖上顯示數字 48 x=np.arange(3) 49 y=np.array(gender_list) 50 for a,b in zip(x,y): 51 plt.text(a, b+0.1, '%.2f' % b, ha='center', va= 'bottom',fontsize=12) 52 53 54 # ***-----獲取各種信息-----*** 55 # 定義函數,爬取全部好友的指定信息 56 def get_var(var): 57 variable = [] 58 for i in friends[1:]: 59 value = i[var] 60 variable.append(value) 61 return variable 62 63 # 調用函數,獲得對應信息,並存入csv文件,保存到桌面 64 NickName = get_var("NickName") 65 Sex = get_var("Sex") 66 Province = get_var("Province") 67 City = get_var("City") 68 Signature = get_var("Signature") 69 70 # Excel 打開中文亂碼問題 未解決 71 # 不過能夠經過Excel->數據->文本導入的形式,將csv文件導入,就能夠避免亂碼問題 72 from pandas import DataFrame 73 74 data = {"NickName": NickName, "Sex": Sex, "Province": Province, 75 "City": City, "Signature": Signature} 76 frame = DataFrame(data) 77 frame.to_csv('data.csv', encoding='utf_8_sig', index=True) 78 79 # ***-----統計好友城市分佈-----*** 80 city_dict = {} 81 x_city = [] 82 y_city = [] 83 for city_name in City: 84 if city_name in city_dict: 85 city_dict[city_name] += 1 86 else: 87 city_dict[city_name] = 1 88 city_list = sorted(city_dict.items(), key=lambda item:item[1], reverse=True) 89 # 將前14個城市排序顯示,去除排名第一的未知城市(城市信息爲空的好友) 90 for i in city_list[1:15]: 91 x_city.append(i[0]) 92 y_city.append(i[1]) 93 plt.figure() 94 plt.bar(range(len(x_city)), y_city, tick_label=x_city) 95 plt.xlabel(u'城市') 96 plt.ylabel(u'人數') 97 plt.title(u'好友城市分佈') 98 # 在柱狀圖上顯示數字 99 x=np.arange(len(x_city)) 100 y=np.array(y_city) 101 for a,b in zip(x,y): 102 plt.text(a, b+0.06, '%.2f' % b, ha='center', va='bottom', fontsize=9) 103 104 # ***-----根據個性簽名繪製詞雲圖-----*** 105 # 經過正則匹配清洗數據 106 import re 107 Signature_list = [] 108 for i in friends: 109 signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "") 110 rep = re.compile("lf\d+\w*|[<>/=]") 111 signature = rep.sub("", signature) 112 Signature_list.append(signature) 113 text = "".join(Signature_list) 114 # 調包進行分詞 115 import jieba 116 wordlist = jieba.cut(text, cut_all=False) 117 word_space_split = " ".join(wordlist) 118 # 調包進行詞雲圖繪製 119 from wordcloud import WordCloud, ImageColorGenerator 120 import PIL.Image as Image 121 coloring = np.array(Image.open("czc.jpg")) 122 my_wordcloud = WordCloud(background_color="white", max_words=200, 123 mask=coloring, max_font_size=70, random_state=42, scale=2, 124 font_path="C:\Windows\Fonts\SimHei.ttf").generate(word_space_split) 125 image_colors = ImageColorGenerator(coloring) 126 plt.figure() 127 plt.imshow(my_wordcloud.recolor(color_func=image_colors)) 128 plt.imshow(my_wordcloud) 129 plt.axis("off") 130 plt.show()
還可使用獲取到的微信好友頭像進行拼接(參考http://www.javashuo.com/article/p-htcqjzzy-ds.html)