网站调用新浪微博内容( 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
最终结果如上图!!!!
到这里,完整的微博爬虫就解决了!!!