日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集

發(fā)布時(shí)間:2023/12/31 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:本文主要是分享下利用python爬取百度指定貼吧的全部帖子以及帖子回復(fù)內(nèi)容,主要是利用python的request庫(kù)獲取網(wǎng)頁(yè)信息,通過正則等方式解析我們需要的數(shù)據(jù)并存儲(chǔ)到數(shù)據(jù)庫(kù)中,并且后續(xù)可以用于情感分析、熱詞分析等分析,這些分析操作可以看我的另一篇文章。

https://www.bizhibihui.com/blog/article/38

下面我們開始正式介紹如何從零開始完成百度貼吧的數(shù)據(jù)采集代碼

首先,我們還是一如既往的打開我們要爬取的目標(biāo)網(wǎng)站進(jìn)行分析,如下圖所示

我們還是從上到下,挨個(gè)尋找返回具體信息的接口請(qǐng)求,我們可以很容易就發(fā)現(xiàn)第一個(gè)請(qǐng)求里就返回了數(shù)據(jù)

但是我們會(huì)發(fā)現(xiàn)這個(gè)數(shù)據(jù)和我們常見的網(wǎng)頁(yè)數(shù)據(jù)不一樣,我們可以用request來論證這個(gè)觀點(diǎn)

response = requests.get(url,headers=self.headers)try:response_txt = str(response.content,'utf-8')except Exception as e:response_txt = str(response.content,'gbk')

我們會(huì)發(fā)現(xiàn)無法直接通過xpath解析我們拿到的數(shù)據(jù),原因其實(shí)很簡(jiǎn)單,就是這些網(wǎng)頁(yè)數(shù)據(jù)是百度通過特殊的js動(dòng)態(tài)渲染的,但是我們?cè)诘谝粋€(gè)請(qǐng)求里其實(shí)就可以拿到我們想要的數(shù)據(jù),只不過,我們需要多費(fèi)點(diǎn)勁,我們現(xiàn)在就來研究下這個(gè)接口里返回的數(shù)據(jù),如下圖所示

可以發(fā)現(xiàn),我們所有的數(shù)據(jù)的html都是被<!-- -->符號(hào)給包裹起來了,這對(duì)于html文件來說就是注釋的意思,所以直接解析這些數(shù)據(jù),肯定是無法獲取的,既然我們無法解析,那就該想想其他的辦法,既然我們發(fā)現(xiàn)了我們的數(shù)據(jù)都是存在于<!-- -->符號(hào),那我們可以考慮把這個(gè)數(shù)據(jù)當(dāng)成整個(gè)的字符串,然后用正則表達(dá)式獲取這部分內(nèi)容不就成了么,說干就干,代碼如下:

bs64_str = re.findall('<code class="pagelet_html" id="pagelet_html_frs-list/pagelet/thread_list" style="display:none;">[.nSs]*?</code>', response_txt)bs64_str = ''.join(bs64_str).replace('<code class="pagelet_html" id="pagelet_html_frs-list/pagelet/thread_list" style="display:none;"><!--','')bs64_str = bs64_str.replace('--></code>','')

解析的結(jié)果你們就自行實(shí)驗(yàn)去把,按照這種正則表達(dá)式我們就可以拿到我們想要的數(shù)據(jù),拿到了數(shù)據(jù),我們就可以利用xpath解析數(shù)據(jù),代碼如下

html = etree.HTML(bs64_str)# print(thread_list)# 標(biāo)題列表title_list = html.xpath('//div[@class="threadlist_title pull_left j_th_tit "]/a[1]/@title')# print(title_list)# 鏈接列表link_list = html.xpath('//div[@class="threadlist_title pull_left j_th_tit "]/a[1]/@href')# 發(fā)帖人creator_list = html.xpath('//div[@class="threadlist_author pull_right"]/span[@class="tb_icon_author "]/@title')# 發(fā)帖時(shí)間create_time_list = html.xpath('//div[@class="threadlist_author pull_right"]/span[@class="pull-right is_show_create_time"]/text()')creator_list = creator_list[1:]create_time_list = create_time_list[1:]print(create_time_list)print(create_time_list[1])for i in range(len(title_list)):item = dict()item['create_time'] = create_time_list[i]if(item['create_time'] == '廣告'):continueitem['create_time'] = self.get_time_convert(item['create_time'])print(item['create_time'])item['title'] = self.filter_emoji(title_list[i])item['link'] = 'https://tieba.baidu.com'+link_list[i]item['creator'] = self.filter_emoji(creator_list[i]).replace('主題作者: ','')item['content'] = self.filter_emoji(item['title'])print(item['creator'])# 保存帖子數(shù)據(jù)result = self.database.query_tieba(item['link'])if(not result):self.database.save_tieba(item)self.spider_tieba_detail(item['link'])

進(jìn)行到這一步,我們的爬蟲代碼基本就成了,這只是簡(jiǎn)單的實(shí)現(xiàn),我們可以看下爬到的數(shù)據(jù),如下圖所示

完整代碼的話去我開源的爬蟲項(xiàng)目里看看,有任何疑問,也歡迎各位留言或者咨詢

https://gitee.com/chengrongkai/OpenSpiders

本文首發(fā)于https://www.bizhibihui.com/blog/article/43

總結(jié)

以上是生活随笔為你收集整理的清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。