如何利用python刷微博粉丝_使用python进行新浪微博粉丝爬虫

由于最近没事在学python,正好最近也想趴下新浪微博上边的一些数据,在这里主要爬去的是一个人的粉丝具体信息(微博昵称,个人介绍,地址,通过什么方式进行关注),所以就学以致用,通过python来爬去微博上边的数据。

首先先说下环境啊,使用的是python3.5,然后使用的框架有:

requests:用来获取html页面。

BeautifulSoup:用来进行html的解析,是一个在python爬虫中非常好用的一个工具,并且有中文的说明文档,链接是:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html。可以看其中具体的一些函数的使用的方法。

通过这两个,则就可以实现我们想要实现的功能了。

然后第二步,则是我们需要模拟微博进行登录,因为你会发现,如果你不登录,是无法看一个人的具体的粉丝信息的,因此我们需要自己登录下新浪微博,然后通过调试工具,把cookie复制出来,这样才能够进行爬虫。,怎么获取cookie,在这进行一个简单的介绍,登陆后看到个人主页后,打开开发者工具,然后选择network:

然后复制下这个cookie,在爬虫中需要用到,接下来就上代码了:

主程序类代码:

import requests

from html.parser import HTMLParser

import person

from bs4 import BeautifulSoup

import json

#获取的cookie值存放在这

myHeader = {"Cookie":"SINAGLOBAL=1151648924265.729.1510207774298; YF-V5-G0=a9b587b1791ab233f24db4e09dad383c; login_sid_t=663888f6033b6f4a8f5fa48b26d9eb17; YF-Ugrow-G0=ea90f703b7694b74b62d38420b5273df; _s_tentry=passport.weibo.com; Apache=9283625770163.1.1512087277478; ULV=1512087277483:2:1:1:9283625770163.1.1512087277478:1510207774304; SSOLoginState=1512087292; wvr=6; YF-Page-G0=451b3eb7a5a4008f8b81de1fcc8cf90e; cross_origin_proto=SSL; WBStorage=82ca67f06fa80da0|undefined; crossidccode=CODE-gz-1ElEPq-16RrfZ-qpysbLqGTWJetzH095150; SCF=AnQFFpBKBne2YCQtu52G1zEuEpkY1WI_QdgCdIs-ANt1_wzGQ0_VgvzYW7PLnswMwwJgI9T3YeRDGsWhfOwoLBs.; SUB=_2A253IOm1DeThGeNG6lsU-CjOzTWIHXVUVFx9rDV8PUNbmtBeLWTSkW9NS2IjRFgpnHs1R3f_H3nB67BbC--9b_Hb; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5fUsSPaZjP3cB4EXR8M3gT5JpX5KzhUgL.Fo-ReK.f1hqESo.2dJLoIEXLxK.L1hzLBKeLxK-LBo.LBoBLxKML1-zL1-zLxK-LBKBL12qLxK-L1K-L122t; SUHB=0wnlry4ys0tunb; ALF=1543884132; wb_cusLike_5819586269=N; UOR=,,login.sina.com.cn"}

#要爬去的账号的粉丝列表页面的地址

r = requests.get('https://weibo.com/p/1005051678105910/follow?relate=fans&from=100505&wvr=6&mod=headfans&current=fans#place',headers=myHeader)

f = open("test.html", "w", encoding="UTF-8")

parser = HTMLParser()

parser.feed(r.text)

htmlStr = r.text

# 通过script来切割后边的几个通过js来显示的json数组,通过观看源代码

fansStr = htmlStr.split("")

#因为在测试的时候,发现微博每一次返回的dom的顺序不一样,粉丝列表的dom和一个其他内容的dom的位置一直交替,所以在这加了一个判断

tmpJson = fansStr[-2][17:-1] if fansStr[-2][17:-1].__len__()>fansStr[-3][17:-1].__len__() else fansStr[-3][17:-1]

dict = json.loads(tmpJson)

soup = BeautifulSoup(dict['html'], 'html')

soup.prettify()

f.write(soup.prettify())

for divTag in soup.find_all('div'):

if divTag['class'] == ["follow_inner"]:

followTag = divTag

if locals().get("followTag"):

for personTag in followTag.find_all('dl'):

p = person.person(personTag)

print(p.__dict__)

person类代码:

在这中间进行主要的解析

from bs4 import BeautifulSoup

#具体解析在这

class person(object):

def __init__(self, personTag = None):

self.analysis(personTag)

def analysis(self,personTag):

self.analysisName(personTag)

self.analysisFollowAndFansNumber(personTag)

self.analysisCity(personTag)

self.analysisIntroduce(personTag)

self.analysisFollowWay(personTag)

self.analysisID(personTag)

def analysisName(self,personTag):

self.name = personTag.div.a.string

def analysisFollowAndFansNumber(self,personTag):

for divTag in personTag.find_all('div'):

if divTag['class'] == ["info_connect"]:

infoTag = divTag

if locals().get("infoTag"):

self.followNumber = infoTag.find_all('span')[0].em.string

self.fansNumber = infoTag.find_all('span')[1].em.a.string

self.assay = infoTag.find_all('span')[2].em.a.string

def analysisCity(self,personTag):

for divTag in personTag.find_all('div'):

if divTag['class'] == ['info_add']:

addressTag = divTag

if locals().get('addressTag'):

self.address = addressTag.span.string

def analysisIntroduce(self,personTag):

for divTag in personTag.find_all('div'):

if divTag['class'] == ['info_intro']:

introduceTag = divTag

if locals().get('introduceTag'):

self.introduce = introduceTag.span.string

def analysisFollowWay(self,personTag):

for divTag in personTag.find_all('div'):

if divTag['class'] == ['info_from']:

fromTag = divTag

if locals().get('fromTag'):

self.fromInfo = fromTag.a.string

def analysisID(self,personTag):

personRel = personTag.dt.a['href']

self.id = personRel[personRel.find('=')+1:-5]+personRel[3:personRel.find('?')]

在这里爬去的是孙俪下边的第一页列表的微博的粉丝,结果如下截图:

其实这个相对还是比较简单的,主要比较麻烦的是需要看新浪的html的源代码,需要了解其显示的规律,然后使用beautiful soup进行解析节点,获取数据。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解决这个问题。你可以使用 Python 的第三方库 `requests` 和 `beautifulsoup4` 来爬取微博某个话题的内容数据。 首先,你需要了解微博的 URL 格式。以微博话题“Python爬虫”为例,其 URL 为:https://s.weibo.com/weibo?q=%23Python%E7%88%AC%E8%99%AB%23&Refer=top。其中,“%23”是“#”的 URL 编码,“q=”后面跟的是话题的关键词。 接下来,你可以使用 `requests` 库向该 URL 发送 GET 请求,并将响应结果的 HTML 代码解析为 `beautifulsoup4` 对象。例如: ```python import requests from bs4 import BeautifulSoup url = 'https://s.weibo.com/weibo?q=%23Python%E7%88%AC%E8%99%AB%23&Refer=top' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') ``` 然后,你可以使用 `beautifulsoup4` 的查找方法来提取微博内容数据。例如,你可以使用 `find_all` 方法找到所有的微博 div 元素,再从中提取微博的文本内容和发布时间。具体代码如下: ```python weibo_list = soup.find_all('div', class_='content') # 找到所有微博 div 元素 for weibo in weibo_list: text = weibo.find('p', class_='txt').get_text() # 提取微博文本内容 time = weibo.find('p', class_='from').find('a').get_text() # 提取微博发布时间 print(text, time) ``` 以上就是爬取微博话题“Python爬虫”内容数据的基本步骤。当然,实际应用中还需要注意反爬虫策略、数据清洗和存储等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值