怎样用python爬新浪微博大V所有数据

怎样用python爬新浪微博大V所有数据,第1张

我是个微博重度用户,工作学习之余喜欢刷刷timeline看看有什么新鲜事发生,也因此认识了不少高质量的原创大V,有分享技术资料的,比如好东西传送门;有时不时给你一点人生经验的,比如石康;有高产的段子手,比如银教授;有黄图黄段子小能手,比如阿良哥哥 木木萝希木 初犬饼…

好吧,我承认,爬黄图黄段子才是我的真实目的,前三个是掩人耳目的…(捂脸,跑开)

另外说点题外话,我一开始想使用Sina Weibo API来获取微博内容,但后来发现新浪微博的API限制实在太多,大家感受一下:

只能获取当前授权的用户(就是自己),而且只能返回最新的5条,WTF!

所以果断放弃掉这条路,改为『生爬』,因为PC端的微博是Ajax的动态加载,爬取起来有些困难,我果断知难而退,改为对移动端的微博进行爬取,因为移动端的微博可以通过分页爬取的方式来一次性爬取所有微博内容,这样工作就简化了不少。

最后实现的功能:

输入要爬取的微博用户的user_id,获得该用户的所有微博

文字内容保存到以%user_id命名文本文件中,所有高清原图保存在weibo_image文件夹中

具体 *** 作:

首先我们要获得自己的cookie,这里只说chrome的获取方法。

用chrome打开新浪微博移动端

option+command+i调出开发者工具

点开Network,将Preserve log选项选中

输入账号密码,登录新浪微博

找到mweibocn->Headers->Cookie,把cookie复制到代码中的#your cookie处

cookie

然后再获取你想爬取的用户的user_id,这个我不用多说啥了吧,点开用户主页,地址栏里面那个号码就是user_id

将python代码保存到weibo_spiderpy文件中

定位到当前目录下后,命令行执行python weibo_spiderpy user_id

当然如果你忘记在后面加user_id,执行的时候命令行也会提示你输入

最后执行结束

iTerm

小问题:在我的测试中,有的时候会出现下载失败的问题,具体原因还不是很清楚,可能是网速问题,因为我宿舍的网速实在太不稳定了,当然也有可能是别的问题,所以在程序根目录下面,我还生成了一个userid_imageurls的文本文件,里面存储了爬取的所有的下载链接,如果出现大片的下载失败,可以将该链接群一股脑导进迅雷等下载工具进行下载。

另外,我的系统是OSX EI Capitan10112,Python的版本是27,依赖库用sudo pip install XXXX就可以安装,具体配置问题可以自行stackoverflow,这里就不展开讲了。

下面我就给出实现代码(严肃脸)

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

   

#--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)

syssetdefaultencoding('utf-8')

if(len(sysargv) >=2):

user_id = (int)(sysargv[1])

else:

user_id = (int)(raw_input(u"请输入user_id: "))

cookie = {"Cookie": "#your cookie"}

url = 'dfilter=1&page=1'%user_id

html = requestsget(url, cookies = cookie)content

selector = etreeHTML(html)

pageNum = (int)(selectorxpath('//input[@name="mp"]')[0]attrib['value'])

result = ""

urllist_set = set()

word_count = 1

image_count = 1

print u'爬虫准备就绪'

for page in range(1,pageNum+1):

#获取lxml页面

url = 'hu/%dfilter=1&page=%d'%(user_id,page)

lxml = requestsget(url, cookies = cookie)content

#文字爬取

selector = etreeHTML(lxml)

content = selectorxpath('//span[@class="ctt"]')

for each in content:

text = eachxpath('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 = soupfind_all('a',href=recompile(r'^mblog/oripic',reI))

first = 0

for imgurl in urllist:

urllist_setadd(requestsget(imgurl['href'], cookies = cookie)url)

image_count +=1

fo = open("/Users/Personals/%s"%user_id, "wb")

fowrite(result)

word_path=osgetcwd()+'/%d'%user_id

print u'文字微博爬取完毕'

link = ""

fo2 = open("/Users/Personals/%s_imageurls"%user_id, "wb")

for eachlink in urllist_set:

link = link + eachlink +"\n"

fo2write(link)

print u'链接爬取完毕'

if not urllist_set:

print u'该页面中不存在'

else:

#下载,保存在当前目录的pythonimg文件夹下

image_path=osgetcwd()+'/weibo_image'

if ospathexists(image_path) is False:

osmkdir(image_path)

x=1

for imgurl in urllist_set:

temp= image_path + '/%sjpg' % x

print u'正在下载第%s张' % x

try:

urlliburlretrieve(urllib2urlopen(imgurl)geturl(),temp)

except:

print u"该下载失败:%s"%imgurl

x+=1

print u'原创微博爬取完毕,共%d条,保存路径%s'%(word_count-4,word_path)

print u'微博爬取完毕,共%d张,保存路径%s'%(image_count-1,image_path)

   

但是新浪提供的API可谓是项目繁琐,尤其是关于java的API。三个版本的javaAPI让你蛋碎到极致:weibo4j-oauth20,weibo4jandroid,android-sdk这三个版本真是要逆天。自从新浪微博将v1变到v2的时候,weibo4jandroid已经无法使用了,所以只能使用剩下的两个。但是当你很辛苦的下载了

android-sdk

版本的时候,运行这个程序,发现只能获取code,而不能获取accesstoken,打开源代码,点击里面的MainActivity,发现一句 *** 蛋到要割掉自己小鸡鸡的话:

UtilityshowToast(暂时封闭此功能,不提供Token算法,请访问code算法自行取token:),

不要担心,通过code变成token的方法新浪其实已经提供了,只不过没有在android-sdk中间,而是在weibo4j中的 weibo4jexamplesoauth2OAuth4Code里面:

以上就是关于怎样用python爬新浪微博大V所有数据全部的内容,包括:怎样用python爬新浪微博大V所有数据、详细讲解新浪微博的API到底如何使用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10128987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存