日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实战项目一:requests爬取淘宝图片

發布時間:2024/1/1 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实战项目一:requests爬取淘宝图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

按關鍵詞爬取淘寶的圖片

●實驗過程遇到的問題:

1.??????一開始我沒注意,將文件名寫為requests.py,但是運行時卻出現了這個錯誤:module 'requests' has no attribute 'get',代碼檢查了好幾次,才想起來,python調用模塊會優先從當前路徑下搜索該模塊,找不到再去環境變量里找,這個如果用requests命名,那問題就是,程序一運行,當前目錄下就有一個requests.py,那么它就會引用該模塊,自然會報錯,修改文件名之后運行成功

2.??????之前一直不怎么懂requests庫如何將爬取到的圖片下載下來,今天自己體驗了一下爬取,才明白,直接附代碼吧

with open('D:/pictures/'+str(i)+str(n)+'.jpg', 'wb') as f:f.write(pic.content)

需要注意的是,下載圖片打開文件方式為’wb’,即以二進制方式寫入。圖片、音頻、視頻這些文件本質都是由二進制碼組成的,要想抓取這些,就要拿到它們的二進制碼。寫入文本可用.text,寫入圖片音頻視頻要用.content。

使用正則表達式時,re.compile(pat, re.S).findall(html)或是re.findall(pat,re.S, html),如果要提取的內容在多行,由于.*?不能匹配多行,所以增加re.S這句,可以匹配多行

3.??????爬淘寶要模擬瀏覽器訪問,否則會被禁止爬取的,方法是可以加一個頭信息爬取

?

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}r = requests.get(url, headers=headers)

?

4.??????如果我沒記錯的話,好像用urllib庫爬取時,若是想要用關鍵詞爬取,而關鍵詞又是含有中文的話,則要增加一步將中文為url可讀取的方式這一步驟,requests庫就不需要,

?

5.??????關于if __name__ == '__main__',意思是:當.py文件被直接運行時,if__name__ == '__main__'之下的代碼塊將被運行,若.py文件以模塊形式被導入時,if __name__ == '__main__'之下的代碼塊不被運行。

●最后代碼可以實現的功能:一開始只是想爬取淘女郎圖片的,后來優化時,就想功能多一點也好,就利用關鍵詞去爬取。所以現在可以任意輸入一個關鍵詞,都可以爬取了。

附上代碼,主要是給自己做一個筆記,擔心在本地的話可能會不小心被自己給刪掉

import re import requests import time import osdef get_one_html(url): # 獲取一個頁面的html頁面并返回try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}r = requests.get(url, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodingreturn r.textexcept Exception as er:print(er)def get_pic_url(html): # 用正則提取每一頁的關鍵信息返回pic_urls = re.findall('"pic_url":"(.*?)"', html, re.S)img_url = [] # 創建空列表,裝每一頁的所有圖片的鏈接for one_pic_url in pic_urls:img_url.append('http:'+one_pic_url)return img_url # 返回圖片的鏈接的列表def write_to_file(page, img_urls): # 寫入文件(下載)i = page # 利用頁碼,防止后面的寫入會覆蓋之前的n = 0for pic_url in img_urls:pic = requests.get(pic_url)with open('D:/pictures/'+str(i)+str(n)+'.jpg', 'wb') as f:f.write(pic.content)print('---第{}頁第{}張圖下載成功---'.format(str(i), str(n)))n += 1def main(keyword, page_num, url):html = get_one_html(url) # 調用函數得到該頁的hmlimg_urls = get_pic_url(html) # 調用函數得到該頁的所有圖片的鏈接write_to_file(page, img_urls) # 調用函數,寫入即下載圖片if __name__ == '__main__':keyword = input('請輸入關鍵詞:')page_num = eval(input('請輸入要爬取的頁數:'))try:os.mkdir('D:/pictures/')for page in range(0, page_num):url = 'http://s.taobao.com/search?q='+keyword+'&s='+str(page)main(keyword, page_num, url)if page % 2 == 0:time.sleep(10) # 每爬取2頁停留10秒except Exception as err:print(err)

?

?

?

總結

以上是生活随笔為你收集整理的python实战项目一:requests爬取淘宝图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。