1,首先登陆今日头条(https://www.toutiao.com/)再搜索街拍
2,查看网页源码,发现了索引页返回的数据是一个Json数据包
查看网页的网络请求2当我们在网页中,下滑查看更多图片的时候,发现只有offset的数据在变化
从0 ,20,40,
3,所以我们开始爬取索引页
通过requests,返回网页的信息3,分析返回的网页信息,提取索引页内的每个子页
返回后的是一推Json数据
其中子页的图片集,存放在如下先运用Beautifulsoup提取title名:
然后运用正则表达式,提取图片集的url,并以字典的形式返回
因为返回的数据中有多余的'\'的符号,所以这里的解决办法是:
#由于匹配后的表达式中存在大量的\\字符,所以这里采用的replace将\\全部替代掉
re =result.group(1)
res =res.replace(r'\','')
运用字符串的replace将‘\去除’
由于发现提取的图片集的url中有许多重复的,这里采取的一个list(set())的方法去重
获取索引中每个子页的title,子页的url,图片集的url3,将爬取后的数据储存到MongDB中:
1,
连接数据库2,
由于数据返回的字典,所以可以直接插入四,将爬取后的图片下载到本地
在这里,主要需要连接os库中的一些操作:
1,os.getcwd() 获得目录的当前系统程序工作路劲
2,os. chdir(‘目标目录’) 切换到目标目录
3,os.listdir(‘字符串目录’) 列出字符串目录下的所有文件
4,os.mkdir('目录') 创建目录
5,os.remove('1.txt') 删除文件,文件不存在时会报错
6,os.linesep 打印操作系统的分隔符,linux系统的分隔符\n,windows系统的分隔符\r\n,mac系统的分隔符\r
7,os.path.join(os.getcwd(),'aaa', ‘bbb’, ‘ccc’) 拼接出来多级目录:E:\test\aaa\bbb\ccc
8,os.path.exists(‘目录’) 判断目录是否存在
9,os.path.split(‘文件或者目录’) 把最后的一个目录或者文件和前面的目录分开,返回一个tuple
10,os.path.splitext(‘文件’) 把文件的后缀名和前面分开,返回一个元组
二,需要理解,hashlib中的md5库中的hexdigest方法:将文件保存时,通过哈希函数对每个文件进行文件名的自动生成
当md5(content).hexdigest生成的命名,犹如指纹一样,是唯一的
为了爬取的速度更快,运用的多进程爬取:
from multiprocessingimport Pool
第一个参数是函数名,第二个参数是一个迭代器,将迭代器中的数字作为参数依次传入函数中
pool.map()
源码:jiepai/__init__.py · XVhongye/分析Ajax请求并爬取今日头条的街拍图片 - 码云 Gitee.com
网友评论