清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集
前言:本文主要是分享下利用python爬取百度指定貼吧的全部帖子以及帖子回復內容,主要是利用python的request庫獲取網頁信息,通過正則等方式解析我們需要的數據并存儲到數據庫中,并且后續可以用于情感分析、熱詞分析等分析,這些分析操作可以看我的另一篇文章。
https://www.bizhibihui.com/blog/article/38
下面我們開始正式介紹如何從零開始完成百度貼吧的數據采集代碼
首先,我們還是一如既往的打開我們要爬取的目標網站進行分析,如下圖所示
我們還是從上到下,挨個尋找返回具體信息的接口請求,我們可以很容易就發現第一個請求里就返回了數據
但是我們會發現這個數據和我們常見的網頁數據不一樣,我們可以用request來論證這個觀點
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')我們會發現無法直接通過xpath解析我們拿到的數據,原因其實很簡單,就是這些網頁數據是百度通過特殊的js動態渲染的,但是我們在第一個請求里其實就可以拿到我們想要的數據,只不過,我們需要多費點勁,我們現在就來研究下這個接口里返回的數據,如下圖所示
可以發現,我們所有的數據的html都是被<!-- -->符號給包裹起來了,這對于html文件來說就是注釋的意思,所以直接解析這些數據,肯定是無法獲取的,既然我們無法解析,那就該想想其他的辦法,既然我們發現了我們的數據都是存在于<!-- -->符號,那我們可以考慮把這個數據當成整個的字符串,然后用正則表達式獲取這部分內容不就成了么,說干就干,代碼如下:
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>','')解析的結果你們就自行實驗去把,按照這種正則表達式我們就可以拿到我們想要的數據,拿到了數據,我們就可以利用xpath解析數據,代碼如下
html = etree.HTML(bs64_str)# print(thread_list)# 標題列表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')# 發帖人creator_list = html.xpath('//div[@class="threadlist_author pull_right"]/span[@class="tb_icon_author "]/@title')# 發帖時間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'])# 保存帖子數據result = self.database.query_tieba(item['link'])if(not result):self.database.save_tieba(item)self.spider_tieba_detail(item['link'])進行到這一步,我們的爬蟲代碼基本就成了,這只是簡單的實現,我們可以看下爬到的數據,如下圖所示
完整代碼的話去我開源的爬蟲項目里看看,有任何疑問,也歡迎各位留言或者咨詢
https://gitee.com/chengrongkai/OpenSpiders
本文首發于https://www.bizhibihui.com/blog/article/43
總結
以上是生活随笔為你收集整理的清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国农业银行app如何注册(《中国》第一
- 下一篇: 定义一个空切片_Python进阶:全面解