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)
python爬虫-使用多进程爬取美图-人工智能语言(高效爬虫)
猜你喜欢
转载自blog.csdn.net/qq_42514453/article/details/82847815
今日推荐
周排行