赞
踩
- 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)
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。