昨天我们分析了今日头条搜索得到的信息,一直对图集感兴趣的我还是选择将所有的图片下载下来。

我们继续讲一下如何通过各个图集的url得到每个图集下面的照片。

分析图集的组成

【插入图片,某个图集的页面】

我们看上面的这个图片,右面的1/5可以看出,这个图集有5张图片,在图片上右侧点击的话,会打开下一张图片。

我们来看一下这些图片的url在哪里?

分析图集的源代码

【插入图片,图集页的XHR信息】

我们先看一下XHR,返回的仍然是一些json信息,但是每个json里面的内容都不是我们需要的图片的url。

而是一些评论、广告等信息。

那么这些图片的url在哪里呢?

我们再看一下HTML的源代码。

【插入图片,图集源代码】

我们在响应内容中竟然发现了一个gallery,里面包含了5张图片的url。

既然在响应中可以找到内容,我们就可以使用requests的get方法来请求到这些响应,但是如何将每张图片的url提取出来?

从响应中提取URL

【插入图片,gallery内容】

我们仔细看一下,gallery里面,使用json.parse命令,将一个json字符串转换成了对象。里面包含了url信息,但是挺难提取出来。

尤其是在url中存在很多\,相信很多读者都搞不清楚了。我们简单讲解一下:

要匹配字符串中1个反斜杠\怎么写正则表达式?”\“,这样可以吗?我们经过尝试,出现异常了。因为在正则表达式中,”\“就是一个反斜杠,对于正则表达式解析式来说,就是一个转义字符,后面啥匹配内容没有,自然报错。我们应该用四个反斜杠”\\“这样就可以了。

代码如下:

import re

re_str_patt = “\\“#这里指的是要匹配一个反斜杠

reObj = re.compile(re_str_patt)

str_test = “abc\cd\hh”#这里的意思是abc\cd\hh

print reObj.findall(str_test)

输出:[‘\‘, ‘\‘]

如果我们使用r,也就是原生字符串,举个例子;

import re

re_str_patt = r”\\“#匹配”\“

reObj = re.compile(re_str_patt)

str_test = “abc\cd\hh”#abc\cd\hh

print reObj.findall(str_test)

输出:[]#啥也没找到。

所以各位读者应该能感觉到,我还是想使用re正则来把url匹配出来的。

当然,图集的title我们也要获取,这时尝试用beautifulsoup来解析吧,省得忘记用法。

3、获取图集页的源代码

def get_page_detail(url):

try:

response = requests.get(url)        if response.status_code==200:            return response.text        else:            return None

except Exception:

print('请求索引页出错!')        return None

很简单,使用requests很容易就得到了源代码。

4、获取某个图集的所有图片url

def parse_page_detail(html):

soup=BeautifulSoup(html,'lxml')

title=soup.select('title')[0].get_text()

print(title)

images_pattern=re.compile(r'url\\":\\"(.*?)\\"}],\\"uri')#url\":\"(url)\"}],\uri

items=re.findall(images_pattern,html)

result=[]    for item in items:

new_item=''.join(item.split('\\'))#将匹配出来的字符串中的所有\都去除掉

#result.append(new_item)

http_pattern=re.compile(r'(http.*?)","width')#匹配所有正常的url地址

a_items=re.findall(http_pattern,new_item)

result.append(a_items[0])#取第一个url即可。

print(result)    return result

主要的难度在于解析上。上面的代码单纯看的话,很难懂,希望大家能动手尝试一下,看看每一步都输出什么样的结果。

这里就不展开讲解了。

5、运行

def main(offset):

html=get_page_index(offset)    for url in parse_page_index(html):

content=get_page_detail(url)

parse_page_detail(content)if __name__=='__main__':    # p=Pool()

# p.map(main,[i*20 for i in range(3)])

for i in range(3):

main(i*20)

【插入图片,图片结果】

这次没有用多进程来操作,结果慢了很多。。。

昨天和今天的讲解,主要内容还是在于如何对Ajax加载的内容进行分析,如何获取json数据。图片的下载前面我们已经有过实战案例了,这里就不在重复写代码了。

希望大家有所收获。

python爬今日头条图片保存_爬虫实战【7】Ajax解析续-今日头条图片下载相关推荐

  1. java爬取网页数据_Python网络爬虫实战(二)数据解析

    Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...

  2. python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片

    随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...

  3. python爬取qq音乐评论_爬虫:QQ音乐评论

    QQ音乐评论 有些小伙伴反馈,对于爬虫的完整流程,还是不清楚,这边就按顺序,给大家梳理一下 反爬 首先查看一下,我们要爬取的网页,是否反爬(各种侵害人家服务器的事情,我们不能干) QQ音乐网址:htt ...

  4. python爬取pubmed的文献_爬虫获取pubmed中文献的标题和摘要

    为了满足快速浏览pubmed中相关文献标题和摘要的需求,写了个简单的爬虫(目前只实现了单个关键词以及多个关键词的and检索),用于批量获取感兴趣文献的标题和摘要. 使用编辑器是python,所编写的爬 ...

  5. python爬取数据情感分析_爬虫再探实战(五)———爬取APP数据——超级课程表【四】——情感分析...

    仔细看的话,会发现之前的词频分析并没有什么卵用...文本分析真正的大哥是NLP,不过,这个坑太大,小白不大敢跳...不过还是忍不住在坑边上往下瞅瞅2333. 言归正传,今天刚了解到boson公司有py ...

  6. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  7. python爬取腾讯新闻_python爬虫实战――爬取腾讯新闻 !

    无论我们通过浏览器打开网站.访问网页,还是通过脚本对URL网址进行访问,本质上都是对HTTP服务器的请求,浏览器上所呈现的.控制台所显示的都是HTTP服务器对我们请求的响应. 以打开腾讯新闻官网为例, ...

  8. python爬取学校题库_Python爬虫实战-获取某网站题库

    爬取*网站题库 import requests import re import time import html headers = { 'User-Agent':'Mozilla/5.0 (Win ...

  9. python爬取历史天气查询_Python爬虫实战-爬取历史天气数据

    最近项目需要对合肥市历史天气数据进行爬取,分析了几个天气数据网站,最终选择天气后报网站. 将实现过程遇到的问题以及下来,供以后参考. 步骤分析 这里我使用的是Python中的requests库Beau ...

最新文章

  1. Centos7升级python
  2. poj 3579 Median 中间值(二分搜索)
  3. Apahce的虚拟用户认证及server-status页
  4. strstr的应用---Hd 2054 A == B ?
  5. 二维分类教案_大班数学二维分类教案
  6. Xshell配置ssh免密码登录-密钥公钥(Public key)
  7. python扫描端口脚本_python写的端口扫描脚本
  8. android 虚拟键盘改变单个按键颜色_这款机械键盘很特别!一亿次按键寿命还有高颜值...
  9. 纯css实现给图片加标签
  10. static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?...
  11. 【图的有向路径检查】程序员面试金典——4.2有向路径检查
  12. 优酷路由宝 OpenWrt 刷机
  13. 3dsMax中Vray渲染器法线贴图用法
  14. 图中提取数据再作图---GetData Graph Digitizer
  15. ABTest效果检验样本量计算
  16. 录音软件行业调研报告 - 市场现状分析与发展前景预测
  17. win10禁用全角_win10输入法全角半角怎么切换 快捷键使用教程
  18. 大数据:一张图让你明白什么是大数据
  19. 星际争霸1-PvPGN战网架设参数
  20. 这些AI开源项目可以让你创作出卢浮宫级别的艺术品!

热门文章

  1. 树状数组 思路以及性能分析
  2. 《京东虚拟业务多维订单系统架构设计》阅读笔记
  3. 最懂商用车的狮桥,在智慧物流上下了一盘什么棋?
  4. 你应该学会像程序员一样思考
  5. 学术论文写作辅助工具
  6. 360笔试-关于手表指针
  7. js鼠标点击事件监听
  8. Java面向对象之修饰符、封装、继承、多态详解
  9. centos mysql2_centos7下在线安装mysqlMySQL内存调优
  10. 常用的社群引流技巧汇总