爬取今日头条图集 进入今日头条首页:https://www.toutiao.com/
步骤:1、查看网页,查找我们需要的URL,分析URL
2、获取网页内容,分析内容
3、定位我们需要的内容
4、将数据存储
在搜素框 输入要搜索的内容(例如:街拍),然后选择图集,F12检查,查看Ajax请求:
第一次Ajax请求:
再往下拉,触发第二次、第三次Ajax请求:(下图第二次Ajax请求)
分析URL后发现发现规律只有offset不同(第一次offset=0,第二次offset=20,第三次offset=40、、),其他内容都相同,此时我们得到了当前页面的所有图片文章的URL(每条只可以看到四张,但是里面本应该有8张,如下图一),但是我们得不到具体一个里面的所有图片。故我们需要再进去此URL,再去分析具体一篇图片文章的所有图片URL(下图二)。
然后我们再分析get请求的Response,我们去分析返回值,查找出每张图片的URL,如下图我们找出了图片对应的URL路径:
所有的分析到这里就结束了,接下来就是代码实现。
完整代码如下:
-
import re -
import requests -
import json -
import os -
from urllib import request -
filename = 'Download' -
if not os.path.exists(filename): -
os.mkdir(filename) # 新建文件夹用于存放图片 -
i = 0 -
strdes = 0 -
offset = 20 -
while i < 10: -
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', -
} -
# 第一层 url -
url = 'https://www.toutiao.com/search_content/?offset={}&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=3&from=gallery'.format(str(offset*i)) -
response = requests.get(url, headers=headers) -
res_dict = response.json() -
# print(res_dict) -
# address_url = -
res_dict_data = res_dict['data'] -
# print(res_dict_data) -
# print(type(res_dict_data)) -
for url_dict in res_dict_data: -
# 获取到的第二层url -
url = url_dict['article_url'] -
print(url) -
response = requests.get(url, headers=headers) -
info = response.text -
re_m = r'gallery: JSON\.parse\((.*)\),' -
msg = re.search(re_m, info) -
if msg == None: -
break -
msg_info = msg.group(1) -
msg_str = json.loads(msg_info) -
msg_dict = json.loads(msg_str) -
# print(msg_dict) -
info_msg = msg_dict['sub_images'] -
for j in info_msg: -
images_url = j['url'] -
# print(images_url) -
# img_name = filename + '/' + images_url.split('/')[-1] + '.jpg' -
img_name = filename + '/' + str(strdes) + '.jpg' -
strdes += 1 -
print(img_name) -
request.urlretrieve(images_url, img_name) -
i = i + 1