python爬蟲-使用多程序爬取美圖-人工智慧語言(高效爬蟲)
阿新 • • 發佈:2019-01-03
import os from multiprocessing.pool import Pool from urllib.parse import urlencode from hashlib import md5 import requests def loaDpage(fullurl): """ 負責發請求獲取圖片url :return: """ headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36" } response = requests.get(fullurl, headers=headers) jsonFile = response.json() # 該方法返回json格式檔案 這裡可以把獲取到的json檔案寫入本地,便於接下來解析 with codecs.open('jiepai1.json', 'wb', encoding='utf-8') as f: source = json.dumps(response.json(), ensure_ascii=False) + '\n' f.write(source) parsePage(jsonFile) def parsePage(jsonFile): if jsonFile.get('data'): # 先獲取data資料, data = jsonFile.get('data') for i in data: # 分析發現data是一個列表,列表裡嵌套了字典 if i.get('image_list'): # 獲取每一條圖片url資料 for url in i.get('image_list'): # 這裡獲取到的url中有的不是我們需要的美圖,進行過濾 if type(url) == dict: # 這裡拿到的url只是縮圖的url,我們進行替換以及url的拼接 new_url = 'http:' + url.get('url').replace('list', 'large') writePage(new_url) def writePage(new_url): """ 負責寫入本地檔案 :return: """ headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36" } # 請求每一張圖片 response = requests.get(new_url, headers=headers) data = response.content # content方法得到二進位制圖片檔案 fileName = md5(data).hexdigest() + '.jpg' # 使用md5並且對圖片進行命名 with open(fileName, 'wb') as f: f.write(data) # def spiderMeinv(beginPage, endPage): def spiderMeinv(offset): """ 排程執行 :return: """ # 這裡使用抓包工具把ajax請求的引數列舉出來便於大家分析 # # offset=60 # &format=json& # keyword=%E8%A1%97%E6%8B%8D%E7%BE%8E%E5%A5%B3& # autoload=true& # count=20 # &cur_tab=1& # from=search_tab data = { 'offset': offset, 'format': 'json', 'keyword': '街拍美女', 'autoload': 'true', 'count': '20', 'cur_tab': '1', 'from': 'search_tab' } url = 'https://www.toutiao.com/search_content/?' datas = urlencode(data) fullurl = url + datas loaDpage(fullurl) if __name__ == '__main__': # 接收使用者輸入 beginPage = int(input('輸入起始頁:')) endPage = int(input('輸入結束頁:')) # 準備基礎資料 url = 'https://www.toutiao.com/search_content/?' headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36" } # 建立資料夾存放美圖,切換工作目錄 if not os.path.exists('jiepai'): os.mkdir('jiepai') os.chdir('jiepai') groups = [x * 20 for x in range(beginPage, endPage + 1)] pool = Pool(5) # 這裡pool.map的兩個引數分別是要執行的函式名和一個可迭代物件,表示把可迭代物件中的所有的值一作為引數依次傳入函式中 pool.map(spiderMeinv, groups)