清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集
前言:本文主要是分享下利用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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国农业银行app如何注册(《中国》第一
- 下一篇: 定义一个空切片_Python进阶:全面解