最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Python編寫簡單的微博爬蟲

 更新時間:2016年03月04日 14:29:06   作者:語亮  
這篇文章主要介紹了如何利用Python編寫一個簡單的微博爬蟲,感興趣的小伙伴們可以參考一下

先說點(diǎn)題外話,我一開始想使用Sina Weibo API來獲取微博內(nèi)容,但后來發(fā)現(xiàn)新浪微博的API限制實(shí)在太多,大家感受一下:


只能獲取當(dāng)前授權(quán)的用戶(就是自己),而且只能返回最新的5條,WTF!
所以果斷放棄掉這條路,改為『生爬』,因?yàn)镻C端的微博是Ajax的動態(tài)加載,爬取起來有些困難,我果斷知難而退,改為對移動端的微博進(jìn)行爬取,因?yàn)橐苿佣说奈⒉┛梢酝ㄟ^分頁爬取的方式來一次性爬取所有微博內(nèi)容,這樣工作就簡化了不少。

最后實(shí)現(xiàn)的功能:

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

1、用chrome打開新浪微博移動端
2、option+command+i調(diào)出開發(fā)者工具
3、點(diǎn)開Network,將Preserve log選項(xiàng)選中
4、輸入賬號密碼,登錄新浪微博

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

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


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

最后執(zhí)行結(jié)束


小問題:在我的測試中,有的時候會出現(xiàn)圖片下載失敗的問題,具體原因還不是很清楚,可能是網(wǎng)速問題,因?yàn)槲宜奚岬木W(wǎng)速實(shí)在太不穩(wěn)定了,當(dāng)然也有可能是別的問題,所以在程序根目錄下面,我還生成了一個userid_imageurls的文本文件,里面存儲了爬取的所有圖片的下載鏈接,如果出現(xiàn)大片的圖片下載失敗,可以將該鏈接群一股腦導(dǎo)進(jìn)迅雷等下載工具進(jìn)行下載。

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

下面我就給出實(shí)現(xiàn)代碼

#-*-coding:utf8-*-

import re
import string
import sys
import os
import urllib
import urllib2
from bs4 import BeautifulSoup
import requests
from lxml import etree

reload(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_id

html = requests.get(url, cookies = cookie).content
selector = etree.HTML(html)
pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])

result = "" 
urllist_set = set()
word_count = 1
image_count = 1

print u'爬蟲準(zhǔn)備就緒...'

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 +=1

fo = open("/Users/Personals/%s"%user_id, "wb")
fo.write(result)
word_path=os.getcwd()+'/%d'%user_id
print 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:
 #下載圖片,保存在當(dāng)前目錄的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+=1

print u'原創(chuàng)微博爬取完畢,共%d條,保存路徑%s'%(word_count-4,word_path)
print u'微博圖片爬取完畢,共%d張,保存路徑%s'%(image_count-1,image_path)

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

相關(guān)文章

  • python寫一個md5解密器示例

    python寫一個md5解密器示例

    這篇文章主要介紹了python寫一個md5解密器示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 為什么黑客都用python(123個黑客必備的Python工具)

    為什么黑客都用python(123個黑客必備的Python工具)

    python支持功能強(qiáng)大的黑客攻擊模塊,而且Python提供多種庫,用于支持黑客攻擊,Python提供了ctypes庫, 借助它, 黑客可以訪問Windows、OS X、Linux等系統(tǒng)提供 DLL與共享庫,還有Python語言易學(xué)易用,這對黑客攻擊而言是個巨大的優(yōu)勢。
    2020-01-01
  • JavaScript中的模擬事件和自定義事件實(shí)例分析

    JavaScript中的模擬事件和自定義事件實(shí)例分析

    這篇文章主要介紹了JavaScript中的模擬事件和自定義事件,結(jié)合實(shí)例形式分析了JavaScript模擬事件和自定義事件相關(guān)操作步驟、實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Numpy中Meshgrid函數(shù)基本用法及2種應(yīng)用場景

    Numpy中Meshgrid函數(shù)基本用法及2種應(yīng)用場景

    NumPy包含很多實(shí)用的數(shù)學(xué)函數(shù),涵蓋線性代數(shù)運(yùn)算、傅里葉變換和隨機(jī)數(shù)生成等功能,下面這篇文章主要給大家介紹了關(guān)于Numpy中Meshgrid函數(shù)基本用法及2種應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 跟老齊學(xué)Python之有容乃大的list(2)

    跟老齊學(xué)Python之有容乃大的list(2)

    上一篇文章中,我們對list的操作提到了list.append(x),也就是將某個元素x 追加到已知的一個list后邊。今天我們來繼續(xù)討論list。
    2014-09-09
  • python GUI庫圖形界面開發(fā)之PyQt5 UI主線程與耗時線程分離詳細(xì)方法實(shí)例

    python GUI庫圖形界面開發(fā)之PyQt5 UI主線程與耗時線程分離詳細(xì)方法實(shí)例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5 UI主線程與耗時線程分離詳細(xì)方法實(shí)例,需要的朋友可以參考下
    2020-02-02
  • python  ceiling divide 除法向上取整(或小數(shù)向上取整)的實(shí)例

    python ceiling divide 除法向上取整(或小數(shù)向上取整)的實(shí)例

    今天小編就為大家分享一篇python ceiling divide 除法向上取整 (或小數(shù)向上取整)的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 如何使用conda和pip批量安裝Python包

    如何使用conda和pip批量安裝Python包

    這篇文章主要介紹了如何使用conda和pip批量安裝Python包問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python路徑的寫法及目錄的獲取方式

    python路徑的寫法及目錄的獲取方式

    今天小編就為大家分享一篇python路徑的寫法及目錄的獲取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 圖鄰接矩陣可視化解析

    圖鄰接矩陣可視化解析

    這篇文章主要介紹了基于圖鄰接矩陣可視化解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論

咸丰县| 大同县| 巫溪县| 南漳县| 安康市| 长海县| 平陆县| 东源县| 襄樊市| 仙居县| 克东县| 壶关县| 交口县| 刚察县| 河池市| 长汀县| 沧州市| 大姚县| 商丘市| 双城市| 玉门市| 乐昌市| 永清县| 海丰县| 北安市| 洱源县| 鄂托克前旗| 大宁县| 赣州市| 勐海县| 吴桥县| 靖江市| 喜德县| 高碑店市| 略阳县| 云浮市| 镇巴县| 崇仁县| 多伦县| 张家港市| 沾化县|