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