Python爬蟲教程-新浪微博分布式爬蟲分享


爬蟲功能:

此項目實現將單機的新浪微博爬蟲重構成分布式爬蟲。

Master機只管任務調度,不管爬數據;Slaver機只管將Request拋給Master機,需要Request的時候再從Master機拿。

環境、架構:

開發語言:Python2.7

開發環境:64位Windows8系統,4G內存,i7-3612QM處理器。

數據庫:MongoDB 3.2.0、Redis 3.0.501

(Python編輯器:Pycharm;MongoDB管理工具:MongoBooster;Redis管理工具:RedisStudio)

爬蟲框架使用 Scrapy,使用 scrapy_redis 和 Redis 實現分布式。

分布式中有一台機充當Master,安裝Redis進行任務調度,其余機子充當Slaver只管從Master那里拿任務去爬。原理是:Slaver運行的時候,scrapy遇到Request並不是交給spider去爬,而是統一交給Master機上的Redis數據庫,spider要爬的Request也都是從Redis中取來的,而Redis接收到Request后先去重再存入數據庫,哪個Slaver要Request了再給它,由此實現任務協同。

使用說明:

Python需要安裝好Scrapy、pymongo、json、base64、requests。

Master機只需要安裝好Redis即可(內存要求大點),Slaver機需要安裝python環境和MongoDB來存儲數據。如果想要將數據都存儲到一台機子上,直接改一下爬蟲程序(pipeline)里面MongoDB的IP即可,或者建議搭建一個MongoDB集群。Redis和MongoDB都是安裝好即可,不需要配置。

將你用來登錄的微博賬號和密碼加入到 cookies.py 文件中,里面已經有兩個賬號作為格式參考了。

可以修改scrapy里面setting的設置,例如間隔時間、日志級別、redis的IP等等。

以上配置完以后運行 Begin.py 即可。重申Master機不需要跑程序,它的功能是利用Redis進行任務調度。Slaver機跑爬蟲,新增一台Slaver機,只需要把python環境和MongoDB搭建好,然后將代碼復制過去直接運行就行了。

項目源碼

 1 # encoding=utf-8
 2 import json
 3 import base64
 4 import requests
 5  
 6 """
 7 輸入你的微博賬號和密碼,可去淘寶買,一元七個。
 8 建議買幾十個,微博反扒的厲害,太頻繁了會出現302轉移。
 9 或者你也可以把時間間隔調大點。
10 """
11 myWeiBo = [
12     {'no': 'jiadieyuso3319@163.com', 'psw': 'a123456'},
13     {'no': 'shudieful3618@163.com', 'psw': 'a123456'},
14 ]
15  
16  
17 def getCookies(weibo):
18     """ 獲取Cookies """
19     cookies = []
20     loginURL = r'https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)'
21     for elem in weibo:
22         account = elem['no']
23         password = elem['psw']
24         username = base64.b64encode(account.encode('utf-8')).decode('utf-8')
25         postData = {
26             "entry": "sso",
27             "gateway": "1",
28             "from": "null",
29             "savestate": "30",
30             "useticket": "0",
31             "pagerefer": "",
32             "vsnf": "1",
33             "su": username,
34             "service": "sso",
35             "sp": password,
36             "sr": "1440*900",
37             "encoding": "UTF-8",
38             "cdult": "3",
39             "domain": "sina.com.cn",
40             "prelt": "0",
41             "returntype": "TEXT",
42         }
43         session = requests.Session()
44         r = session.post(loginURL, data=postData)
45         jsonStr = r.content.decode('gbk')
46         info = json.loads(jsonStr)
47         if info["retcode"] == "0":
48             print "Get Cookie Success!( Account:%s )" % account
49             cookie = session.cookies.get_dict()
50             cookies.append(cookie)
51         else:
52             print "Failed!( Reason:%s )" % info['reason']
53     return cookies
54  
55  
56 cookies = getCookies(myWeiBo)
57 print "Get Cookies Finish!( Num:%d)" % len(cookies)

在成為一個優秀的Python開發工程師的道路上,充滿了汗水和辛勞

初學者對Python開發能做什么,學的時候該按照什么線路去學習,學完往哪方面發展?想深入系統了解Python可以復制有道雲鏈接到瀏覽器打開系統的了解學習:http://note.youdao.com/noteshare?id=e4fa02e7b56d7909a27674cdb3da08aa

開發工具、學習資料等都有分享,還有專業的老師在線免費直播分享答疑!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM