Ajax爬取今日头条街拍美图

1.打开今日头条:https://www.toutiao.com

2.搜索街拍

3.检查元素,查看请求发现在URL中每次只有offset发生改变,是一个get请求

 1 import requests
 2 from urllib.parse import urlencode
 3 import os
 4 from hashlib import md5
 5 from multiprocessing.pool import Pool
 6
 7 def get_page(offset):
 8     params = {
 9         ‘offset‘: offset,
10         ‘format‘: ‘json‘,
11         ‘keyword‘: ‘街拍‘,
12         ‘autoload‘: ‘true‘,
13         ‘count‘: ‘20‘,
14         ‘cur_tab‘: ‘1‘,
15         ‘from‘: ‘search_tab‘
16     }
17     url = ‘http://www.toutiao.com/search_content/?‘ + urlencode(params)
18     try:
19         response = requests.get(url)
20         if response.status_code == 200:
21             return response.json()
22     except requests.ConnectionError:
23         return None
24
25 def get_images(json):
26     if json.get(‘data‘):
27         data = json.get(‘data‘)
28         for item in data:
29             if item.get(‘cell_type‘) is not None:
30                 continue
31             title = item.get(‘title‘)
32             images = item.get(‘image_list‘)
33             for image in images:
34                 yield{
35                     ‘image‘: ‘http:‘ + image.get(‘url‘),
36                     ‘title‘: title
37                 }
38
39 def save_image(item):
40     image_path = ‘img‘ + os.path.sep + item.get(‘title‘)
41     if not os.path.exists(image_path):
42         os.mkdir(image_path)
43     try:
44         response = requests.get(item.get(‘image‘))
45         if response.status_code == 200:
46             file_path = image_path + os.path.sep + ‘{file_name}.{file_suffix}‘.format(
47                 file_name=md5(response.content).hexdigest(),
48                 file_suffix=‘jpg‘
49             )
50             if not os.path.exists(file_path):
51                 with open(file_path, ‘wb‘) as f:
52                     f.write(response.content)
53                     print(‘Downloaded image path is {0}‘.format(file_path))
54             else:
55                 print(‘Already Downloads‘, file_path)
56     except requests.ConnectionError:
57         print(‘Failed to save image !!!‘)
58
59 def main(offset):
60     json = get_page(offset)
61     for item in get_images(json):
62         print(item)
63         save_image(item)
64
65 GROUP_START = 0
66 GROUP_END = 9
67
68 if __name__ == ‘__main__‘:
69     pool = Pool()
70     groups = ([x * 20 for x in range(GROUP_START, GROUP_END+1)])
71     pool.map(main, groups)
72     pool.close()
73     pool.join()

原文地址:https://www.cnblogs.com/chengchengaqin/p/9792420.html

时间: 2024-10-03 11:08:03

Ajax爬取今日头条街拍美图的相关文章

芝麻HTTP:分析Ajax爬取今日头条街拍美图

本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节开始之前,请确保已经安装好requests库. 2.实战演练 首先,实现方法get_page()来加载单个Ajax请求的结果.其中唯一变化的参数就是offset,所以我们将它当作参数传递,实现如下: import requests from urllib.parse import urlencode def

【Python3网络爬虫开发实战】 分析Ajax爬取今日头条街拍美图

前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:haoxuan10 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 准备工作在本节开始之前,请确保已经安装好requests库.如果没有安装,可以参考第1章.另外如果你对python的库不是很熟的话,建议先去小编的Python交流.裙 :一久武其而而流

分析Ajax爬取今日头条街拍美图

1 import os 2 import requests 3 from urllib.parse import urlencode 4 from hashlib import md5 5 from multiprocessing.pool import Pool 6 7 GROUP_START = 1 8 GROUP_END = 5 9 10 def get_page(offset): 11 params = { 12 'offset': offset, 13 'format': 'json'

分析Ajax请求并抓取今日头条街拍美图

通常我们从网页上爬取内容时,都是HTML代码,内容都已经写好了,直接从页面获取想要的信息即可,但是有的网页是通过ajax获取的数据,将ajax获取的数据通过json格式接受,然后展示在页面上的,也就是说,当我们打开一个页面时,首先请求的是他的html,然后HTML里面通过ajax获取后端数据,将数据以json格式展示在页面上.而近日头条就是这样.下面我们来看看. 我们打开链接:https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D,我

ajax爬取今日头条街拍图片——data出现none的解决

之前爬取总是出现如图的结果:手动打开url显示的是想要的结果,但是爬取的时候data为空 尝试了多种方法,偶然得到了想要的结果: 这是多次实验中成功与不成功结果中构造的url 发现 1)得到想要结果,所构造的url中keyword=******与下一参数间没有&链接 2)同样的keyword=%E8%A1%97%E6%8B%8D,参用不同的方式:‘https://www.toutiao.com/api/search/content/?keyword=%E8%A1%97%E6%8B%8D’+url

ajax分析-今日头条街拍美图抓取

我们知道,有时候直接利用requests请求得到的原始数据是无效的,因为很多时候,这样获取的一个网页的源代码很可能就几行,明显不是我们想要的东西,这个时候,我们就可以分析,这样的网页中是不是加入了ajax请求,即原始页面加载完成后,会再向服务器请求某个接口去获取数据,然后才被呈现到网上的. ajax并不是一门语言,而是一门技术,它可以在页面不被刷新的情况下,利用javascript进行数据交换,渲染网页进而呈现,我们平时用手机刷微博,往下拉就会出现加载的小圆圈,那个就是加入了ajax请求. 所以

用Ajax爬取今日头条图片

Ajax原理 ? 在用requests抓取页面时,得到的结果可能和浏览器中看到的不一样:在浏览器中可以正常显示的页面数据,但用requests得到的结果并没有.这是因为requests获取的都是原始 HTML文档,而浏览器中页面 则是经过Ajax处理数据后生成的.这些数据可能在HTML文档中,也可能是经过JavaScript和特定算法后生成的. ? 刚开始HTML文档中不包含某些数据,当原始页面加载完后,会向服务器发送Ajax请求获取数据,这些数据被JavaScript处理形成一些新页面. ?

用Ajax爬取今日头条图片集

Ajax原理 ? 在用requests抓取页面时,得到的结果可能和浏览器中看到的不一样:在浏览器中可以正常显示的页面数据,但用requests得到的结果并没有.这是因为requests获取的都是原始 HTML文档,而浏览器中页面 则是经过Ajax处理数据后生成的.这些数据可能在HTML文档中,也可能是经过JavaScript和特定算法后生成的. ? 刚开始HTML文档中不包含某些数据,当原始页面加载完后,会向服务器发送Ajax请求获取数据,这些数据被JavaScript处理形成一些新页面. ?

多线程高容错爬头条街拍美图

分析头条的ajax,通过正则表达式,python3多线程高容错爬取头条的街拍美图,保存到mongodb,并下载图片 头条的内容网页较之前已经改版,图床页不仅有ajax的还有html的内容网页 所以使用了两种正则,根据条件调用 #!/usr/bin/env python # -*- coding:utf-8 -*- """ @author:Aiker @file:toutiao.py @time:下午9:35 """ import json imp