這幾天我很焦慮,受不了那些先follow我,等我follow回去後又unfollow的人,由於是他們先follow個人,我出於人道主義想着互粉一下的,結果這麼對我,太不厚道了。github又不像微博那樣有互粉標誌,這真的整得我很心煩,因而想着寫一個爬蟲,把這些「壞人」揪出來~
第一步,固然是放出代碼啦,代碼放在個人github上,歡迎給star:html
https://github.com/laurel-he/...
我是一個python初學者,徹底小白,因此只能用比較蠢的方法來扒,如下是個人步驟:
1 扒取整個頁面python
# -*- coding:UTF-8 -*- import requests if __name__ == '__main__': target = 'https://github.com/laurel-he?tab=followers' req = requests.get(url=target) fo = open('1.txt', "ab+") fo.write((req.text).encode('UTF-8')) fo.close()
以上代碼能夠將整個文件的html扒取下來,接下來找到用戶,在follower裏面隨便找到一個用戶,在剛纔生成的txt文件中搜索,而後就能夠獲得以下匹配:git
data-octo-dimensions="link_type:self". href="/(.?)"
能夠直接匹配出用戶名。
2 根據正則獲取匹配的用戶
剛纔已經把整個頁面扒取下來了,代碼放在spider/follwers/url.py,txt文件效果以下:github
可是我想要獲取的是全部follwer,以前已經獲得了對應的正則表達式,那麼獲得全部的follwer很容易,最終代碼以下:正則表達式
# -*- coding:UTF-8 -*- import requests import re if __name__ == '__main__': target = 'https://github.com/laurel-he?tab=followers' req = requests.get(url=target) context = req.text patt = re.compile(r"data-octo-dimensions=\"link_type:self\".*href=\"/(.*?)\"") ch = patt.findall(req.text) fo = open('flower.txt',"ab+") for i in ch: line = str(i) + "\n" fo.write((line).encode('UTF-8')+b'\r\n') fo.close
以上代碼能夠直接扒取全部follwers,可是出現了兩遍,由於我這個表達式每一個名字會匹配到兩次,下一版本會更換正則表達式,先將就用吧,而後如法炮製扒取第二頁第三頁,只須要更改連接地址,加上page就能夠,同時也能夠把文件寫入方式變成追加方式,或者乾脆每次都新建一個文件,無所謂,總之最終將全部用戶扒取下來。按照一樣的方式扒取全部的本身follwing的用戶。
這裏注意的是,代碼裏必定要加上換行!換行符不加就是一團亂麻,啥也看不清。
換行符添加後不成功的話試試加上'r',也許就能成功了;
仍是不成功的話看看報錯是否是這個樣子滴:ide
是的話加上b方法,轉化成byte~
3 接下來是最傻最騷的操做-對比
想要找出來那個沒有follow本身的人,只能進行對比,我目前用了一個很傻的辦法就是新建一個excel文件,按照列粘貼全部數據,而後按照升序或降序排行(兩列排列方式要同樣),而後肉眼來對比!!!url
其實我仍是以爲我要瞎了,可是真的比起一個個看好多了,之後繼續想更好的辦法,總之我是揪出來那個壞人了。。。可是爲了尊重人家隱私權,好吧,就這樣吧,我也不能作啥。spa