网站调用新浪微博内容( Python爬虫爬取新浪微博用户数据的方法结果展示步骤)

优采云 发布时间: 2022-01-17 11:04

  网站调用新浪微博内容(

Python爬虫爬取新浪微博用户数据的方法结果展示步骤)

  【Python3爬虫】抓取新浪微博用户信息和微博内容

  在大数据时代,数据已成为研究领域不可或缺的一部分。新浪微博作为新时代流行的新媒体社交平台,拥有大量的用户行为和商业数据。因此,研究人员需要获取新浪微博数据。但新浪微博拥有海量数据。最好的获取方式无疑是使用Python爬虫获取。有一些使用Python爬虫爬取新浪微博数据的教程,但是完整的介绍和爬取用户的所有数据信息都比较少,所以这里有一篇主要使用selenium包爬取新浪微博用户数据的文章文章 . 码字不易,喜欢就​​点个赞吧!!!

  

  目标

  抓取新浪微博用户数据,包括以下字段:id、昵称、关注数、关注数、微博数、每条微博内容、转发数、评论数、点赞数、发布时间、来源和是 原创 还是转推。(本文以GUCCI(古驰)为例)

  方法结果展示

  

  步骤分解

  1.选择抓取目标网址

  首先,在你准备好开始爬取之前,你必须想好要爬取哪个 URL。新浪微博网站分为网页和手机两部分。大部分抓取微博数据都会选择抓取手机,因为相比较而言,手机基本上收录了你想要的所有数据,而且手机相对PC端来说是轻量级的。

  下面是GUCCI的移动端和PC端的网页展示。

  

  

  2.模拟登录

  决定爬取微博手机数据后,就该模拟登录了。

  模拟登录网址

  登录页面如下所示

  

  模拟登录代码

   try:

print(u'登陆新浪微博手机端...')

##打开Firefox浏览器

browser = webdriver.Firefox()

##给定登陆的网址

url = 'https://passport.weibo.cn/signin/login'

browser.get(url)

time.sleep(3)

#找到输入用户名的地方,并将用户名里面的内容清空,然后送入你的账号

username = browser.find_element_by_css_selector('#loginName')

time.sleep(2)

username.clear()

username.send_keys('****')#输入自己的账号

#找到输入密码的地方,然后送入你的密码

password = browser.find_element_by_css_selector('#loginPassword')

time.sleep(2)

password.send_keys('ll117117')

#点击登录

browser.find_element_by_css_selector('#loginAction').click()

##这里给个15秒非常重要,因为在点击登录之后,新浪微博会有个九宫格验证码,下图有,通过程序执行的话会有点麻烦(可以参考崔庆才的Python书里面有解决方法),这里就手动

time.sleep(15)

except:

print('########出现Error########')

finally:

print('完成登陆!')

  

  3.获取用户微博的页码

  登录后可以输入你要抓取的商家信息,因为每个商家的微博数量不同,所以对应的微博页码也不同。在这里,先爬下商家的微博页码。同时,抓取那些公开的信息,如用户uid、用户名、微博数、关注者数、粉丝数。

  

   #本文是以GUCCI为例,GUCCI的用户id为‘GUCCI’

id = 'GUCCI'

niCheng = id

#用户的url结构为 url = 'http://weibo.cn/' + id

url = 'http://weibo.cn/' + id

browser.get(url)

time.sleep(3)

#使用BeautifulSoup解析网页的HTML

soup = BeautifulSoup(browser.page_source, 'lxml')

#爬取商户的uid信息

uid = soup.find('td',attrs={'valign':'top'})

uid = uid.a['href']

uid = uid.split('/')[1]

#爬取最大页码数目

pageSize = soup.find('div', attrs={'id': 'pagelist'})

pageSize = pageSize.find('div').getText()

pageSize = (pageSize.split('/')[1]).split('页')[0]

#爬取微博数量

divMessage = soup.find('div',attrs={'class':'tip2'})

weiBoCount = divMessage.find('span').getText()

weiBoCount = (weiBoCount.split('[')[1]).replace(']','')

#爬取关注数量和粉丝数量

a = divMessage.find_all('a')[:2]

guanZhuCount = (a[0].getText().split('[')[1]).replace(']','')

fenSiCount = (a[1].getText().split('[')[1]).replace(']', '')

  4.根据爬取的最大页码,循环爬取所有数据

  得到最大页码后,直接通过循环爬取每一页数据。抓取的数据包括微博内容、转发数、评论数、点赞数、发微博时间、微博来源、是原创还是转发。

  #通过循环来抓取每一页数据

for i in range(1, pageSize+1): # pageSize+1

#每一页数据的url结构为 url = 'http://weibo.cn/' + id + ‘?page=’ + i

url = 'https://weibo.cn/GUCCI?page=' + str(i)

browser.get(url)

time.sleep(1)

#使用BeautifulSoup解析网页的HTML

soup = BeautifulSoup(browser.page_source, 'lxml')

body = soup.find('body')

divss = body.find_all('div', attrs={'class': 'c'})[1:-2]

for divs in divss:

# yuanChuang : 0表示转发,1表示原创

yuanChuang = '1'#初始值为原创,当非原创时,更改此值

div = divs.find_all('div')

#这里有三种情况,两种为原创,一种为转发

if (len(div) == 2):#原创,有图

#爬取微博内容

content = div[0].find('span', attrs={'class': 'ctt'}).getText()

aa = div[1].find_all('a')

for a in aa:

text = a.getText()

if (('赞' in text) or ('转发' in text) or ('评论' in text)):

#爬取点赞数

if ('赞' in text):

dianZan = (text.split('[')[1]).replace(']', '')

#爬取转发数

elif ('转发' in text):

zhuanFa = (text.split('[')[1]).replace(']', '')

#爬取评论数目

elif ('评论' in text):

pinLun = (text.split('[')[1]).replace(']', '')

#爬取微博来源和时间

span = divs.find('span', attrs={'class': 'ct'}).getText()

faBuTime = str(span.split('来自')[0])

laiYuan = span.split('来自')[1]

#和上面一样

elif (len(div) == 1):#原创,无图

content = div[0].find('span', attrs={'class': 'ctt'}).getText()

aa = div[0].find_all('a')

for a in aa:

text = a.getText()

if (('赞' in text) or ('转发' in text) or ('评论' in text)):

if ('赞' in text):

dianZan = (text.split('[')[1]).replace(']', '')

elif ('转发' in text):

zhuanFa = (text.split('[')[1]).replace(']', '')

elif ('评论' in text):

pinLun = (text.split('[')[1]).replace(']', '')

span = divs.find('span', attrs={'class': 'ct'}).getText()

faBuTime = str(span.split('来自')[0])

laiYuan = span.split('来自')[1]

#这里为转发,其他和上面一样

elif (len(div) == 3):#转发的微博

yuanChuang = '0'

content = div[0].find('span', attrs={'class': 'ctt'}).getText()

aa = div[2].find_all('a')

for a in aa:

text = a.getText()

if (('赞' in text) or ('转发' in text) or ('评论' in text)):

if ('赞' in text):

dianZan = (text.split('[')[1]).replace(']', '')

elif ('转发' in text):

zhuanFa = (text.split('[')[1]).replace(']', '')

elif ('评论' in text):

pinLun = (text.split('[')[1]).replace(']', '')

span = divs.find('span', attrs={'class': 'ct'}).getText()

faBuTime = str(span.split('来自')[0])

laiYuan = span.split('来自')[1]

time.sleep(2)

print(i)

  4.获取所有数据后,可以写入csv文件,或者excel

  最终结果如上图!!!!

  到这里,完整的微博爬虫就解决了!!!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线