python中怎么利用requests爬取百度贴吧用户信息

本篇文章为大家展示了python中怎么利用requests爬取百度贴吧用户信息,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联公司专注于企业营销型网站建设、网站重做改版、港南网站定制设计、自适应品牌网站建设、成都h5网站建设商城开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为港南等各大城市提供网站开发制作服务。

1.安装需要的工具包:

requests包,这个主要是用来发送get或者post请求,获取请求结果

pip install requests

beautifulSoup包,这个主要是用来解析得到的html页面的,方便简单,但是这个包效率低

除了这个包,还可以去尝试用xpath,css选择器,甚至正则去解析,只要你喜欢,用什么解析都可以,本次使用beautifulSoup包

pip install bs4

pymongo,这个python操作MongoDB的工具包,在爬虫中,因为爬下来的数据有一部分是脏数据,所以比较适合使用非关系型数据库存储,mongodb就是一个非关系数据库

pip install pymongo

因为我使用的是一款云数据库所以需要安装一下DNSpython,如果不是用mongodb官网提供的云数据库,不需要安装这个

pip install dnspython

2.分析页面

首先进入python吧

此时页面链接是http://tieba.baidu.com/f?ie=utf-8&kw=python&fr=search&red_tag=s3038027151

我们点击下一页,多点击几次,然后上一页,回到首页

发现链接http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0,http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0

在多个链接中,我们发现规律kw是搜索的关键字,pn是分页,第一页是0,第二页是50,第三页是100,此时我们根据这种规律拼接出来url链接,放到postman中请求,发现规律是对的。这样我们就可以发送请求去抓取列表页了。

现在我们抓取到列表页了,那么怎么获取用户信息呢。

这时我发现鼠标放到此处时会弹出用户的相关信息,所以此处应该可能会有一个请求用户信息的接口

python中怎么利用requests爬取百度贴吧用户信息

现在我们打开开发者工具,重新把鼠标放到此处时,

python中怎么利用requests爬取百度贴吧用户信息

果然发现了请求,结果为json数据,然后将结果复制到json在线这个网站解析,然后发现正是我们想要的数据,(这里就不贴数据了)

此时我们分享这个请求http://tieba.baidu.com/home/get/panel?ie=utf-8&un=du_%E5%B0%8F%E9%99%8C

在请求多人后,发现是根据un这个参数去区分不同的人的,在下图中列出了un这个参数,根据经验可知,这个应该用户的注册用户名,

那么我们从哪里获取这个字段呢,

python中怎么利用requests爬取百度贴吧用户信息

既然它根据这个字段请求了后端接口,那么页面上肯定有这个字段,这时候我们打开开发者工具,查看源代码,在页面定位到这个元素,然后我们发现

python中怎么利用requests爬取百度贴吧用户信息

un字段就在这里,那么我们就可以用这个字段去拼接url了,通过测试后,发现正确

3.代码

爬虫分析完了,这时候就要开始写代码了

首先请求页面,

发送请求,然后parseList()

def tiebaSpider(self,key,beginPage,endPage):    #配置url请求链接和请求头    beginPage = (beginPage - 0) * 50    endPage = (endPage+1) * 50    headers = {        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"}    for page in range(beginPage,endPage,50):        url="http://tieba.baidu.com/f?kw=%s&ie=utf-8&pn=%s"%(key,page)        #发送get请求        response=requests.get(url,headers=headers)        self.parseList(response.text)

解析贴吧页面:

利用beautifulSoup解析页面,

find()函数查找一条符合的数据,第一个参数为html的标签; 如果根据id找,则使用id参数

find_all()查找所有符合的数据,如果根据class去找,则使用class_参数,

如果直接根据标签去找,则不需要id或者class_参数,下面的方法都有用到

在解析中,我先找到了a标签,然后提取其的href数据,提取方式为a['href']

获取属性值后进行切割,切割的是?un=之后和第一个&之前的数据,

如果这个数据不为空,则发送请求获取用户信息

def parseList(self,response):        #解析列表页,创建bs4        soup =BeautifulSoup(response,'html.parser')        #根据页面解析获取ul标签        ul=soup.find("ul",id='thread_list')#获取下面的li标签        liList=ul.find_all('span',class_='frs-author-name-wrap')        #解析获取需要的数据        for li in liList:            a=li.find('a')            un=a['href'].split('&')[0].split('?un=')[-1]            if un!='' and un !=None:                #拼接请求了解,获取用户信息                response=requests.get("http://tieba.baidu.com/home/get/panel?ie=utf-8&un="+un)                print("http://tieba.baidu.com/home/get/panel?ie=utf-8&un="+un)                print(response.url)                self.parseDetail(response.text)

解析用户信息

因为这个是json数据,所以直接用json包去解析即可,然后存入mongodb中

#解析用户信息 def parseDetail(self,response):    try:        info=json.loads(response) #利用json的loads方法将json字符串转换成字典类型取值        data=info['data']        result = {}        result['name']=data['name']        result['name_show']=data['name_show']        sex=data['sex']        if sex=='female':            result['sex']='女'        elif sex=='male':            result['sex']='男'        else:            result['sex']='未知'        result['tb_age']=data['tb_age']        result['id']=data['id']        result['post_num']=data['post_num']        result['tb_vip']=data['tb_vip']        result['followed_count']=data['followed_count']        self.collection.insert_one(result)    except:        pass

4.总结

到此整个项目做完了

但是依然有一些改进之处,我将思路和想法写下来,大家学习的时候,可以自己去尝试一下,

1.没有去做去重,这样会导致大量的重复数据

解决思路:可以将请求用户信息的了解进行保存,然后再次请求时,先去验证有没有请求过

2。反扒,在请求第二个链接时,会出现重定向,经过postman请求发现,不是链接的问题,那只能是频繁请求被封,

上述内容就是python中怎么利用requests爬取百度贴吧用户信息,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


当前标题:python中怎么利用requests爬取百度贴吧用户信息
文章位置:http://pwwzsj.com/article/gssdhh.html