国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用Python編寫簡單的微博爬蟲

2019-11-25 16:53:57
字體:
來源:轉載
供稿:網友

先說點題外話,我一開始想使用Sina Weibo API來獲取微博內容,但后來發現新浪微博的API限制實在太多,大家感受一下:


只能獲取當前授權的用戶(就是自己),而且只能返回最新的5條,WTF!
所以果斷放棄掉這條路,改為『生爬』,因為PC端的微博是Ajax的動態加載,爬取起來有些困難,我果斷知難而退,改為對移動端的微博進行爬取,因為移動端的微博可以通過分頁爬取的方式來一次性爬取所有微博內容,這樣工作就簡化了不少。

最后實現的功能:

1、輸入要爬取的微博用戶的user_id,獲得該用戶的所有微博
2、文字內容保存到以%user_id命名文本文件中,所有高清原圖保存在weibo_image文件夾中
具體操作:
首先我們要獲得自己的cookie,這里只說chrome的獲取方法。

1、用chrome打開新浪微博移動端
2、option+command+i調出開發者工具
3、點開Network,將Preserve log選項選中
4、輸入賬號密碼,登錄新浪微博

5、找到m.weibo.cn->Headers->Cookie,把cookie復制到代碼中的#your cookie處

然后再獲取你想爬取的用戶的user_id,這個我不用多說啥了吧,點開用戶主頁,地址欄里面那個號碼就是user_id


將python代碼保存到weibo_spider.py文件中
定位到當前目錄下后,命令行執行python weibo_spider.py user_id
當然如果你忘記在后面加user_id,執行的時候命令行也會提示你輸入

最后執行結束


小問題:在我的測試中,有的時候會出現圖片下載失敗的問題,具體原因還不是很清楚,可能是網速問題,因為我宿舍的網速實在太不穩定了,當然也有可能是別的問題,所以在程序根目錄下面,我還生成了一個userid_imageurls的文本文件,里面存儲了爬取的所有圖片的下載鏈接,如果出現大片的圖片下載失敗,可以將該鏈接群一股腦導進迅雷等下載工具進行下載。

另外,我的系統是OSX EI Capitan10.11.2,Python的版本是2.7,依賴庫用sudo pip install XXXX就可以安裝,具體配置問題可以自行stackoverflow,這里就不展開講了。

下面我就給出實現代碼

#-*-coding:utf8-*-import reimport stringimport sysimport osimport urllibimport urllib2from bs4 import BeautifulSoupimport requestsfrom lxml import etreereload(sys) sys.setdefaultencoding('utf-8')if(len(sys.argv)>=2):  user_id = (int)(sys.argv[1])else:  user_id = (int)(raw_input(u"請輸入user_id: "))cookie = {"Cookie": "#your cookie"}url = 'http://weibo.cn/u/%d?filter=1&page=1'%user_idhtml = requests.get(url, cookies = cookie).contentselector = etree.HTML(html)pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])result = "" urllist_set = set()word_count = 1image_count = 1print u'爬蟲準備就緒...'for page in range(1,pageNum+1): #獲取lxml頁面 url = 'http://weibo.cn/u/%d?filter=1&page=%d'%(user_id,page)  lxml = requests.get(url, cookies = cookie).content #文字爬取 selector = etree.HTML(lxml) content = selector.xpath('//span[@class="ctt"]') for each in content:  text = each.xpath('string(.)')  if word_count>=4:   text = "%d :"%(word_count-3) +text+"/n/n"  else :   text = text+"/n/n"  result = result + text  word_count += 1 #圖片爬取 soup = BeautifulSoup(lxml, "lxml") urllist = soup.find_all('a',href=re.compile(r'^http://weibo.cn/mblog/oripic',re.I)) first = 0 for imgurl in urllist:  urllist_set.add(requests.get(imgurl['href'], cookies = cookie).url)  image_count +=1fo = open("/Users/Personals/%s"%user_id, "wb")fo.write(result)word_path=os.getcwd()+'/%d'%user_idprint u'文字微博爬取完畢'link = ""fo2 = open("/Users/Personals/%s_imageurls"%user_id, "wb")for eachlink in urllist_set: link = link + eachlink +"/n"fo2.write(link)print u'圖片鏈接爬取完畢'if not urllist_set: print u'該頁面中不存在圖片'else: #下載圖片,保存在當前目錄的pythonimg文件夾下 image_path=os.getcwd()+'/weibo_image' if os.path.exists(image_path) is False:  os.mkdir(image_path) x=1 for imgurl in urllist_set:  temp= image_path + '/%s.jpg' % x  print u'正在下載第%s張圖片' % x  try:   urllib.urlretrieve(urllib2.urlopen(imgurl).geturl(),temp)  except:   print u"該圖片下載失敗:%s"%imgurl  x+=1print u'原創微博爬取完畢,共%d條,保存路徑%s'%(word_count-4,word_path)print u'微博圖片爬取完畢,共%d張,保存路徑%s'%(image_count-1,image_path)

一個簡單的微博爬蟲就完成了,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平南县| 昂仁县| 泉州市| 临洮县| 梓潼县| 洛浦县| 娄底市| 壶关县| 克拉玛依市| 怀来县| 淮安市| 尉氏县| 嘉兴市| 连江县| 大连市| 奎屯市| 临洮县| 太谷县| 万宁市| 黑龙江省| 郧西县| 津南区| 黄梅县| 正阳县| 民丰县| 武定县| 台东市| 涞源县| 泰州市| 巫山县| 德令哈市| 溧阳市| 沁阳市| 那坡县| 年辖:市辖区| 象州县| 辛集市| 商河县| 泰宁县| 社旗县| 比如县|