作業要求來自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159
可以用pandas讀出之前保存的數據:見上次博客爬取全部的校園新聞並保存csv
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)
with sqlite3.connect('gzccnewsdb.sqlite') as db:
df2 = pd.read_sql_query('SELECT * FROM gzccnews',con=db)
保存到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 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')
二.爬蟲綜合大作業
- 選擇一個熱點或者你感興趣的主題。
- 選擇爬取的對象與范圍。
- 了解爬取對象的限制與約束。
- 爬取相應內容。
- 做數據分析與文本分析。
- 形成一篇文章,有說明、技術要點、有數據、有數據分析圖形化展示與說明、文本分析圖形化展示與說明。
- 文章公開發布。
參考:
爬了一下天貓上的Bra購買記錄,有了一些羞羞噠的發現...
Python做了六百萬字的歌詞分析,告訴你中國Rapper都在唱些啥
分析了42萬字歌詞后,終於搞清楚民謠歌手唱什么了
十二星座的真實面目
唐朝詩人之間的關系到底是什么樣的?
中國姓氏排行榜
三.爬蟲注意事項
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)
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()
還可以使用獲取到的微信好友頭像進行拼接(參考https://blog.csdn.net/zrp220807/article/details/80455651)
核心模塊
- itchat(爬取頭像)
- pillow(拼接頭像)
內置模塊
- os(文件夾操作)
- math(數學計算)