网页爬虫抓取百度图片(爬取今日头条图集,老司机以街拍为例(组图))
优采云 发布时间: 2022-03-02 15:09网页爬虫抓取百度图片(爬取今日头条图集,老司机以街拍为例(组图))
今天,我们来爬取今日头条图集。老司机以街拍为例。
操作平台:Windows
Python版本:Python3.6
IDE:崇高文本
其他工具:Chrome浏览器
1、网页分析
从打开今日头条首页,搜索“街拍”,有“综合”、“视频”、“图集”和“用户”四个标签,我们依次点击几个标签,虽然页面变了,但是address bar 的 URL 没有变化,说明页面内容是动态加载的。
按“F12”调出开发者工具,刷新页面,然后分析开发者工具:
①:点击网络
②:选择XHR
③:找到以“?offset=”开头的项目并点击,右侧会出现详细信息
④:点击右侧的“页眉”标签
⑤:查看请求方式和请求地址
⑥:这里是请求的参数
接下来点击 Preview 选项卡查看返回的数据:
返回的数据格式为json,展开“data”字段,展开第一项,查找“title”,可以看到和网页上第一个图集的title一样,说明找到了正确的地方。
继续分析,在“data”的第一项中有一个“image_detail”字段。展开可以看到 6 个项目,每个项目都有一个 url。乍一看,它是图像 URL。我不知道这是否是我们正在寻找的。复制到浏览器打开确实和第一个缩略图一样,那么这6张图都是图集的吗?
点击网页的第一个图集,可以看到确实只有6张图片,和返回的json数据中的图片是一致的。
分析完了吗?我们看看页面除了图片,文字和相关推荐占了这么多内容,图片有点小,我们在图片上右击选择“在新标签页打开图片”,注意地址栏:
你发现其中的奥秘了吗?图片地址“large”变成了“origin”,分别保存两张图片,对比大小,origin比large大很多,这就是我们需要的,至此,网页解析完成,接下来开始编写代码。
2、代码
requests 库用于抓取。由于前面的分析很详细,代码不再单独讲解。请看评论。
#-*- 编码:utf-8 -*-
导入操作系统
重新*敏*感*词*
导入json
导入请求
从 urllib.parse 导入 urlencode
def get_one_page(偏移量,关键字):
'''
获取网页html内容并返回
'''
段 = {
'offset': offset, # 搜索结果项从哪里开始
'format': 'json', # 返回数据格式
'keyword': 关键字,#要搜索的关键字
'autoload': 'true', # 自动加载
'count': 20, # 每次加载结果的项数
'cur_tab': 3, # 当前标签页索引,3为“Atlas”
'from': 'gallery' # 来源,“画廊”
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko)铬/63.0.3239.132 Safari/537.36'}
网址 = '#39; + urlencode(段落)
尝试:
# 获取网页内容并以json格式返回数据
响应 = requests.get(url, headers=headers)
# 通过状态码判断获取是否成功
如果 response.status_code == 200:
返回响应.文本
返回无
除了请求异常:
返回无
def parse_one_page(html):
'''
解析出群组图片的URL,返回网页中所有图集的标题和图片地址
'''
网址 = []
数据 = json.loads(html)
如果 data.keys() 中的数据和“数据”:
对于 data.get('data') 中的项目:
page_urls = []
标题 = item.get('title')
image_detail = item.get('image_detail')
对于我在范围内(len(image_detail)):
# 获取大图地址
url = image_detail[i]['url']
# 替换URL获取原创高清图片
url = url.replace('大', '原点')
page_urls.append(url)
urls.append({'title': 标题,'url_list': page_urls})
返回网址
def save_image_file(url, 路径):
'''
保存图像文件
'''
ir = requests.get(url)
如果 ir.status_code == 200:
使用 open(path, 'wb') 作为 f:
f.write(ir.content)
f.close()
def main(偏移量,字):
html = get_one_page(偏移量,字)
网址 = parse_one_page(html)
# 如果图片文件夹不存在则创建
root_path = 单词
如果不是 os.path.exists(root_path):
os.mkdir(root_path)
对于我在范围内(len(urls)):
print('---正在下载 %s'%urls[i]['title'])
文件夹 = root_path + '/' + urls[i]['title']
如果不是 os.path.exists(文件夹):
尝试:
os.mkdir(文件夹)
NotADirectoryError 除外:
继续
除了 OSError:
继续
url_list = urls[i]['url_list']
对于范围内的 j(len(url_list)):
路径 = 文件夹 + '/index_' + str("d"%j) + '.jpg'
如果不是 os.path.exists(path):
save_image_file(urls[i]['url_list'][j], 路径)
如果 __name__ == '__main__':
# 抓2000个图集,基本上包括所有图集
对于我在范围内(100):
main(i*20, '街拍')
您可以根据自己的喜好替换关键词来下载您喜欢的图集。