天天看點

python爬貼吧回複_python爬蟲例題:爬取百度貼吧評論區圖檔和視訊

百度貼吧是全球最大的中文交流平台,你是否跟我一樣,有時候看到評論區的圖檔想下載下傳呢?或者看到一段視訊想進行下載下傳呢?

今天,本期Python教程帶大家通過搜尋關鍵字來擷取評論區的圖檔和視訊。

【二、項目目标】

實作把貼吧擷取的圖檔或視訊儲存在一個檔案。

【三、涉及的庫和網站】

1、網址如下:

2、涉及的庫:requests、lxml、urrilb

【四、項目分析】

1、反爬措施的處理

前期測試時發現,該網站反爬蟲處理措施很多,測試到有以下幾個:

1) 直接使用requests庫,在不設定任何header的情況下,網站直接不傳回數 據。

2) 同一個ip連續通路40多次,直接封掉ip,起初我的ip就是這樣被封掉的。

為了解決這兩個問題,最後經過研究,使用以下方法,可以有效解決。

擷取正常的 http請求頭,并在requests請求時設定這些正常的http請求頭。

2、如何實作搜尋關鍵字?

通過網址我們可以發現隻需要在kw=() ,括号中輸入你要搜尋的内容即可。這樣就可以用一個{}來替代它,後面我們在通過循環周遊它。

【五、項目實施】

1、建立一個名為BaiduImageSpider的類,定義一個主方法main和初始化方法init。導入需要的庫。

import requests

from lxml import etree

from urllib import parse

class BaiduImageSpider(object):

def __init__(self, tieba_name):

pass

def main(self):

pass

if __name__ == '__main__':

inout_word = input("請輸入你要查詢的資訊:")

spider.main()

pass

if __name__ == '__main__':

spider= ImageSpider()

spider.main()

2、準備url位址和請求頭headers 請求資料。

import requests

from lxml import etree

from urllib import parse

class BaiduImageSpider(object):

def __init__(self, tieba_name):

self.tieba_name = tieba_name #輸入的名字

self.url = "http://tieba.baidu.com/f?kw={}&ie=utf-8&pn=0"

self.headers = {

'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'

}

'''發送請求 擷取響應'''

def get_parse_page(self, url, xpath):

html = requests.get(url=url, headers=self.headers).content.decode("utf-8")

parse_html = etree.HTML(html)

r_list = parse_html.xpath(xpath)

return r_list

def main(self):

url = self.url.format(self.tieba_name)

if __name__ == '__main__':

inout_word = input("請輸入你要查詢的資訊:")

key_word = parse.quote(inout_word)

spider = BaiduImageSpider(key_word)

spider.main()

3、用xpath進行資料分析

3.1、chrome_Xpath插件安裝

1) 這裡用到一個插件。能夠快速檢驗我們爬取的資訊是否正确。具體安裝方法如下。

2) 百度下載下傳chrome_Xpath_v2.0.2.crx, chrome浏覽器輸入:chrome://extensions/

3) 直接将chrome_Xpath_v2.0.2.crx拖動至該擴充程式頁面 ;

4) 如果安裝失敗,彈框提示“無法從該網站添加應用、擴充程式和使用者腳本”,遇到這個問題,解決方法 是:打開開發者模式,将crx檔案(直接或字尾修改為rar)并解壓成檔案夾,點選開發者模式的加載已解壓的擴充程式,選擇解壓後的檔案夾,點選确定,安裝成功;

3.2、chrome_Xpath插件使用

上面我們已經安裝好了chrome_Xpath插件,接下來我們即将使用它。

1) 打開浏覽器,按下快捷鍵F12 。

2) 選擇元素,如下圖所示。

3) 右鍵,然後選擇,“Copy XPath”,如下圖所示。

3.3、編寫代碼,擷取連結函數。

上面我們已經擷取到連結函數的Xpath路徑,接下來定義一個擷取連結函數get_tlink,并繼承self,實作多頁抓取。

'''擷取連結函數'''

def get_tlink(self, url):

xpath = '//div[@class="threadlist_lz clearfix"]/div/a/@href'

t_list = self.get_parse_page(url, xpath)

# print(len(t_list))

for t in t_list:

t_link = "http://www.tieba.com" + t

'''接下來對文章位址發送請求 将儲存到本地'''

self.write_image(t_link)

4、儲存資料

這裡定義一個write_image方法來儲存資料,如下所示。

'''儲存到本地函數'''

def write_image(self, t_link):

xpath = "//div[@class='d_post_content j_d_post_content clearfix']/img[@class='BDE_Image']/@src | //div[@class='video_src_wrapper']/embed/@data-video"

img_list = self.get_parse_page(t_link, xpath)

for img_link in img_list:

html = requests.get(url=img_link, headers=self.headers).content

filename = "百度/"+img_link[-10:]

with open(filename, 'wb') as f:

f.write(html)

print("%s下載下傳成功" % filename)

如下圖:

【六、效果展示】

1、點選運作,如下圖所示(請輸入你要查詢的資訊):

2、以吳京為例輸入,回車:

3、将圖檔下載下傳儲存在一個名為“百度”檔案夾下,這個檔案夾需要你提前在本地建立好。務必記得提前在目前代碼的同級目錄下,建立一個名為“百度”的檔案夾,否則的話系統将找不到該檔案夾,會報找不到“百度”這個檔案夾的錯誤。

4、下圖中的MP4就是評論區的視訊。

總結:

1、不建議抓取太多資料,容易對伺服器造成負載,淺嘗辄止即可。

2、本文基于Python網絡爬蟲,利用爬蟲庫,實作百度貼吧評論區爬取。就Python爬取百度貼吧的一些難點, 進行詳細的講解和提供有效的解決方案。

3、歡迎大家積極嘗試,有時候看到别人實作起來很簡單,但是到自己動手實作的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以了解的更加深刻。學習requests 庫的使用以及爬蟲程式的編寫。