真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中怎么利用requests爬取百度貼吧用戶信息

本篇文章為大家展示了python中怎么利用requests爬取百度貼吧用戶信息,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、港南網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為港南等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1.安裝需要的工具包:

requests包,這個(gè)主要是用來發(fā)送get或者post請求,獲取請求結(jié)果

pip install requests

beautifulSoup包,這個(gè)主要是用來解析得到的html頁面的,方便簡單,但是這個(gè)包效率低

除了這個(gè)包,還可以去嘗試用xpath,css選擇器,甚至正則去解析,只要你喜歡,用什么解析都可以,本次使用beautifulSoup包

pip install bs4

pymongo,這個(gè)python操作MongoDB的工具包,在爬蟲中,因?yàn)榕老聛淼臄?shù)據(jù)有一部分是臟數(shù)據(jù),所以比較適合使用非關(guān)系型數(shù)據(jù)庫存儲(chǔ),mongodb就是一個(gè)非關(guān)系數(shù)據(jù)庫

pip install pymongo

因?yàn)槲沂褂玫氖且豢钤茢?shù)據(jù)庫所以需要安裝一下DNSpython,如果不是用mongodb官網(wǎng)提供的云數(shù)據(jù)庫,不需要安裝這個(gè)

pip install dnspython

2.分析頁面

首先進(jìn)入python吧

此時(shí)頁面鏈接是http://tieba.baidu.com/f?ie=utf-8&kw=python&fr=search&red_tag=s3038027151

我們點(diǎn)擊下一頁,多點(diǎn)擊幾次,然后上一頁,回到首頁

發(fā)現(xiàn)鏈接http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0,http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0

在多個(gè)鏈接中,我們發(fā)現(xiàn)規(guī)律kw是搜索的關(guān)鍵字,pn是分頁,第一頁是0,第二頁是50,第三頁是100,此時(shí)我們根據(jù)這種規(guī)律拼接出來url鏈接,放到postman中請求,發(fā)現(xiàn)規(guī)律是對的。這樣我們就可以發(fā)送請求去抓取列表頁了。

現(xiàn)在我們抓取到列表頁了,那么怎么獲取用戶信息呢。

這時(shí)我發(fā)現(xiàn)鼠標(biāo)放到此處時(shí)會(huì)彈出用戶的相關(guān)信息,所以此處應(yīng)該可能會(huì)有一個(gè)請求用戶信息的接口

python中怎么利用requests爬取百度貼吧用戶信息

現(xiàn)在我們打開開發(fā)者工具,重新把鼠標(biāo)放到此處時(shí),

python中怎么利用requests爬取百度貼吧用戶信息

果然發(fā)現(xiàn)了請求,結(jié)果為json數(shù)據(jù),然后將結(jié)果復(fù)制到j(luò)son在線這個(gè)網(wǎng)站解析,然后發(fā)現(xiàn)正是我們想要的數(shù)據(jù),(這里就不貼數(shù)據(jù)了)

此時(shí)我們分享這個(gè)請求http://tieba.baidu.com/home/get/panel?ie=utf-8&un=du_%E5%B0%8F%E9%99%8C

在請求多人后,發(fā)現(xiàn)是根據(jù)un這個(gè)參數(shù)去區(qū)分不同的人的,在下圖中列出了un這個(gè)參數(shù),根據(jù)經(jīng)驗(yàn)可知,這個(gè)應(yīng)該用戶的注冊用戶名,

那么我們從哪里獲取這個(gè)字段呢,

python中怎么利用requests爬取百度貼吧用戶信息

既然它根據(jù)這個(gè)字段請求了后端接口,那么頁面上肯定有這個(gè)字段,這時(shí)候我們打開開發(fā)者工具,查看源代碼,在頁面定位到這個(gè)元素,然后我們發(fā)現(xiàn)

python中怎么利用requests爬取百度貼吧用戶信息

un字段就在這里,那么我們就可以用這個(gè)字段去拼接url了,通過測試后,發(fā)現(xiàn)正確

3.代碼

爬蟲分析完了,這時(shí)候就要開始寫代碼了

首先請求頁面,

發(fā)送請求,然后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)        #發(fā)送get請求        response=requests.get(url,headers=headers)        self.parseList(response.text)

解析貼吧頁面:

利用beautifulSoup解析頁面,

find()函數(shù)查找一條符合的數(shù)據(jù),第一個(gè)參數(shù)為html的標(biāo)簽; 如果根據(jù)id找,則使用id參數(shù)

find_all()查找所有符合的數(shù)據(jù),如果根據(jù)class去找,則使用class_參數(shù),

如果直接根據(jù)標(biāo)簽去找,則不需要id或者class_參數(shù),下面的方法都有用到

在解析中,我先找到了a標(biāo)簽,然后提取其的href數(shù)據(jù),提取方式為a['href']

獲取屬性值后進(jìn)行切割,切割的是?un=之后和第一個(gè)&之前的數(shù)據(jù),

如果這個(gè)數(shù)據(jù)不為空,則發(fā)送請求獲取用戶信息

def parseList(self,response):        #解析列表頁,創(chuàng)建bs4        soup =BeautifulSoup(response,'html.parser')        #根據(jù)頁面解析獲取ul標(biāo)簽        ul=soup.find("ul",id='thread_list')#獲取下面的li標(biāo)簽        liList=ul.find_all('span',class_='frs-author-name-wrap')        #解析獲取需要的數(shù)據(jù)        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)

解析用戶信息

因?yàn)檫@個(gè)是json數(shù)據(jù),所以直接用json包去解析即可,然后存入mongodb中

#解析用戶信息 def parseDetail(self,response):    try:        info=json.loads(response) #利用json的loads方法將json字符串轉(zhuǎn)換成字典類型取值        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.總結(jié)

到此整個(gè)項(xiàng)目做完了

但是依然有一些改進(jìn)之處,我將思路和想法寫下來,大家學(xué)習(xí)的時(shí)候,可以自己去嘗試一下,

1.沒有去做去重,這樣會(huì)導(dǎo)致大量的重復(fù)數(shù)據(jù)

解決思路:可以將請求用戶信息的了解進(jìn)行保存,然后再次請求時(shí),先去驗(yàn)證有沒有請求過

2。反扒,在請求第二個(gè)鏈接時(shí),會(huì)出現(xiàn)重定向,經(jīng)過postman請求發(fā)現(xiàn),不是鏈接的問題,那只能是頻繁請求被封,

上述內(nèi)容就是python中怎么利用requests爬取百度貼吧用戶信息,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標(biāo)題:python中怎么利用requests爬取百度貼吧用戶信息
分享URL:http://weahome.cn/article/gssdhh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部