入门学习爬取贴吧图片(附完整代码),2021/1/27有效
生活随笔
收集整理的這篇文章主要介紹了
入门学习爬取贴吧图片(附完整代码),2021/1/27有效
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
記錄一下爬蟲學習爬取貼吧圖片,按照以下b站視頻教學,2021/1/27親測有效,不會被封ip。
Python爬蟲實戰講解:爬取百度貼吧全站圖片
結果如下(手動打碼):
源代碼和筆記如下:
#多頁爬取''' 需要環境 requests,parsel(xpath)步驟 1.確定url地址 2.發送請求 3.解析數據(數據篩選)<兩層數據解析> 4.保存數據(本地文件) '''#requests實現幫助請求數據的要求 import requests import parselpage_num = 0 #換頁 for page in range(0,55000+1,50):page_num+=1print('===========================正在爬取第{}頁數據===================='.format(str(page_num)))#1.確定url地址#先確定它是靜態網頁還是動態網頁#靜態網頁:源代碼都有網頁的數據,并且沒有經過瀏覽器的渲染以及加載#判斷靜態數據:在源代碼中搜索的到url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E7%BA%A6%E4%BC%9A%E5%90%A7&fr=search&pn={}'.format(str(page))#之后準備請求參數#刷新頁面后,Chrome的Network欄所有的數據包都可以呈現#user-agent更換為了ie瀏覽器,方便后面的操作headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WoW64; Trident/7.0; rv:11.0) like Gecko'}#2.發送請求response = requests.get(url,headers=headers)#狀態碼:200左右表示請求成功,300左右表示重定向,400左右表示URL地址有錯誤,500左右表示服務器錯誤html_data = response.text #字符串類型數據,只能使用正則表達式#print(html_data)#3.解析數據(數據篩選)<兩層數據解析>#為了獲得最高清的圖片,而不是縮略圖#數據解析第一層:解析所有帖子的《鏈接》#將字符串數據轉換成Selector對象;該對象有re(正則表達式),css選擇器,xpath路徑選擇器html = parsel.Selector(html_data)#print(html)#兩個/(雙斜杠)表示跨節點提取,[@...]通過標簽的屬性值進行精確定位,標簽層級遞增的關系/div/a...,取到標簽后獲得href屬性#同樣也返回Selector對象,getall提取出解析到的數據title_url = html.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href').getall()#部分url的地址,和前面的地址拼接起來去實現#print(title_url) #['/p/7203233304', '/p/7197583050'...]#拼接url地址#前半部分的urlsecond_url = 'https://tieba.baidu.com'for url in title_url:all_url = second_url + urlprint('當前的帖子鏈接為:', all_url)# 第二層:再發送一次url請求,獲得頁面數據,隨后解析出圖片地址#再次發送請求,請求帖子內部的數據response_2 = requests.get(url=all_url,headers=headers).text#第二次解析response_2_data = parsel.Selector(response_2)result_list = response_2_data.xpath('//cc/div/img[@class="BDE_Image"]/@src').getall()#print(result_list) #['http://tiebapic.baidu.com/forum/w%3D580/sign=d941e7678413b07ebdbd50003cd69113/4d456709c93d70cf1974ca4befdcd100bba12b60.jpg', 'http://tiebapic.baidu.com/forum/w%3D580/sign=b6dbbb9a1ffa513d51aa6cd60d6c554c/b74ee5dde71190ef5192bc99d91b9d16fcfa6081.jpg']for li in result_list:#圖片數據,需要content(二進制數據)img_data = requests.get(url=li,headers=headers).content#4.保存數據(本地文件)#圖片的文件名和后綴#'http://tiebapic.baidu.com/forum/w%3D580/sign=d941e7678413b07ebdbd50003cd69113/4d456709c93d70cf1974ca4befdcd100bba12b60.jpg'file_name = li.split('/')[-1]#\\表示把文件保存到該文件夾下,mode文件寫入方式(二進制wb)with open('img\\'+file_name,mode='wb') as f:f.write(img_data)print("正在保存:",file_name)總結
以上是生活随笔為你收集整理的入门学习爬取贴吧图片(附完整代码),2021/1/27有效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平衡二叉树平衡因子
- 下一篇: 视频文件格式解析之 3GP与MP4