如何用Python網(wǎng)絡(luò)爬蟲抓取百度貼吧評論區(qū)圖片和視頻,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
百度貼吧是全球大的中文交流平臺,你是否跟我一樣,有時候看到評論區(qū)的圖片想下載呢?或者看到一段視頻想進(jìn)行下載呢?
今天,帶大家通過搜索關(guān)鍵字來獲取評論區(qū)的圖片和視頻。
【二、項目目標(biāo)】
實現(xiàn)把貼吧獲取的圖片或視頻保存在一個文件。
【三、涉及的庫和網(wǎng)站】
1、網(wǎng)址如下:
https://tieba.baidu.com/f?ie=utf-8&kw=吳京&fr=search
2、涉及的庫:requests、lxml、urrilb
【四、項目分析】
1、反爬措施的處理
前期測試時發(fā)現(xiàn),該網(wǎng)站反爬蟲處理措施很多,測試到有以下幾個:
1) 直接使用requests庫,在不設(shè)置任何header的情況下,網(wǎng)站直接不返回數(shù) 據(jù)。
2) 同一個ip連續(xù)訪問40多次,直接封掉ip,起初我的ip就是這樣被封掉的。
為了解決這兩個問題,最后經(jīng)過研究,使用以下方法,可以有效解決。
獲取正常的 http請求頭,并在requests請求時設(shè)置這些常規(guī)的http請求頭。
通過網(wǎng)址我們可以發(fā)現(xiàn)只需要在kw=() ,括號中輸入你要搜索的內(nèi)容即可。這樣就可以用一個{}來替代它,后面我們在通過循環(huán)遍歷它。
【五、項目實施】
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()
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)'
}
'''發(fā)送請求 獲取響應(yīng)'''
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.1、chrome_Xpath插件安裝
1) 這里用到一個插件。能夠快速檢驗我們爬取的信息是否正確。具體安裝方法如下。
2) 百度下載chrome_Xpath_v2.0.2.crx, chrome瀏覽器輸入:chrome://extensions/
3) 直接將chrome_Xpath_v2.0.2.crx拖動至該擴(kuò)展程序頁面 ;
4) 如果安裝失敗,彈框提示“無法從該網(wǎng)站添加應(yīng)用、擴(kuò)展程序和用戶腳本”,遇到這個問題,解決方法 是:打開開發(fā)者模式,將crx文件(直接或后綴修改為rar)并解壓成文件夾,點擊開發(fā)者模式的加載已解壓的擴(kuò)展程序,選擇解壓后的文件夾,點擊確定,安裝成功;
3.2、chrome_Xpath插件使用
3) 右鍵,然后選擇,“Copy XPath”,如下圖所示。
3.3、編寫代碼,獲取鏈接函數(shù)。
上面我們已經(jīng)獲取到鏈接函數(shù)的Xpath路徑,接下來定義一個獲取鏈接函數(shù)get_tlink,并繼承self,實現(xiàn)多頁抓取。
'''獲取鏈接函數(shù)'''
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
'''接下來對帖子地址發(fā)送請求 將保存到本地'''
self.write_image(t_link)
4、保存數(shù)據(jù)
這里定義一個write_image方法來保存數(shù)據(jù),如下所示。
'''保存到本地函數(shù)'''
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、將圖片下載保存在一個名為“百度”文件夾下,這個文件夾需要你提前在本地新建好。務(wù)必記得提前在當(dāng)前代碼的同級目錄下,新建一個名為“百度”的文件夾,否則的話系統(tǒng)將找不到該文件夾,會報找不到“百度”這個文件夾的錯誤。
4、下圖中的MP4就是評論區(qū)的視頻。
總結(jié):
1、不建議抓取太多數(shù)據(jù),容易對服務(wù)器造成負(fù)載,淺嘗輒止即可。
關(guān)于如何用Python網(wǎng)絡(luò)爬蟲抓取百度貼吧評論區(qū)圖片和視頻問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識。
網(wǎng)頁標(biāo)題:如何用Python網(wǎng)絡(luò)爬蟲抓取百度貼吧評論區(qū)圖片和視頻-創(chuàng)新互聯(lián)
當(dāng)前地址:http://jinyejixie.com/article20/jgsjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、微信公眾號、網(wǎng)頁設(shè)計公司、商城網(wǎng)站、電子商務(wù)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容