网页爬虫抓取百度图片(爬取今日头条图集,老司机以街拍为例(组图))

优采云 发布时间: 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, '街拍')

  您可以根据自己的喜好替换关键词来下载您喜欢的图集。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线