python抓取动态网页(实战分析网站结构,确定我们要的数据内容;image唯美图片)
优采云 发布时间: 2022-03-06 04:01python抓取动态网页(实战分析网站结构,确定我们要的数据内容;image唯美图片)
前言
每个人都需要互相帮助,而我所要做的就是呈现给大家看。
例如,有人可以背一本你不会背的书,有人可以做一个你不会做的问题,有人你愿意推迟到明天,有人今天会努力完成它,对不起,你想要什么工作只能别人做,自己想要的生活也只能别人过!
教师讲授职业以解决疑虑。繁殖的力量就是穿透这些东西,然后才能长出新的叶子。共勉!
- 实战
分析网站的结构,确定我们要抓取的数据内容;
图片
审美画面是对绝对美的追求,强调超越生活的纯粹美,是对完美形式和完美艺术技巧的不断追求。
图片
右键Chrome浏览器查看网络,分析网站的结构;发现这个网页内容很多。单页获取图片数据很简单,但这就是我们的风格?不; 绝对不。即使它是一个非常简单的逻辑,我们也必须以不同的方式使其复杂化。这是托尼先生的程序;追求纯技术。
希望能给更多的编程从业者带来一些优质的文章。
第一步:请求网络并获取服务器返回的数据
不管怎样,我们先获取数据内容;因为检测网站中是否有反爬的唯一因素就是获取它的数据内容;看看能不能正常获取。
这里需要安装 2 个库:
pip install requests 网络请求库
pip install lxml 数据解析库
导入请求
网址='#39;
html=requests.get(url).content.decode('gbk')
打印(html)
接下来,通过分析;我看到网站里面所有内容的页数都很大,有1153页的数据,所以我想,如果只是拿到几页数据内容,真的很容易!但是如果我在爬其他页面,我是否需要担心它是否有这么多的数据;毕竟每一页的数据内容都不一样;这绝对满足不了我对科技的渴望,所以......
图片
图片
第 2 步:解析数据
从 lxml 导入 etree
# 动态获取最后一页数据
page=etree.HTML(html).xpath('//a[@text="last page"]/@href')[0].split('_').split('.')[0]
# list_20_1153.html ---> 1152
打印(页)
接下来在处理的时候,第一页数据和第二页数据的url不一样;并且无法单独获取第二页及后续所有页面的数据;所以……只能拼接。
url_list=[]
网址='#39;
url_list.append(url)
html=requests.get(url).content.decode('gbk')
# 打印(html)
# 谓词
page=etree.HTML(html).xpath('//a[@text="last page"]/@href')[0].split('_').split('.')[0]
对于范围内的项目(2,int(page)+1):
url_list.append(url+'list_20_{}.html'.format(str(item)))
打印(url_list)
图片
至此,我们已经能够动态获取所有页面的链接;我很高兴拥有它;迄今为止; 我们已经跨过了第一步;之后,我们需要获取每个页面的图片详情页面以进行下一步。准备数据处理。
对于 url_list 中的 url_item:
img_url=etree.HTML(requests.get(url_item).text).xpath('//div[@class="ABox"]/a/@href')
打印(img_url)
图片
图片
网站 数据的每一次突破都像是我们的战利品。这就是对技术着迷的容易程度。
接下来的事情越来越有趣了!我们需要再次分析网站详情页;在分析过程中,我发现了一件非常有趣的事情;之前的获取方式很相似……emmmmmm,这里就不细说了!每个人都会自己分析。
图片
图片
所以……为了让程序越来越好玩;接下来,让我们改变它;
# 在单个文件详情页面
def get_img_urls(img_urls):
html=requests.get(img_urls)
html.encoding='gbk'
数据=etree.HTML(html.text)
# 标题
title=data.xpath('//div[@class="wrapper clearfix imgtitle"]/h1/text()')[0]
#总页数
page=data.xpath('//div[@class="wrapper clearfix imgtitle"]/h1/span/span[2]/text()')[0]
img['1']=data.xpath('//a[@class="down-btn"]/@href')[0]
打印(标题,页面)
对于范围内的项目(2,int(page)+1):
text=requests.get(img_urls.replace('.html','_%s.html'%str(item))).text
img_url = etree.HTML(text).xpath('//a[@class="down-btn"]/@href')[0]
返回标题,img
第 3 步:数据存储
在下载数据部分;考虑到我要下载的数据图片-->是原图,而且很多图片的内存比例不一样;如果文件太大,可能会导致内存不足;我们在学习的时候,不需要考虑这个因素,但托尼不这么认为;因为如果有一天每个人都真正学到了一些东西并进入了企业;这时候就要考虑程序优化的问题了;它可以更好地让我们编写高质量的代码程序;这也是考验我们的基本功是否真的扎实;当我们下载大文件时,为了防止它占用过多的内存;所以我做了数据流操作处理
# 下载图片
def 下载图片(网址,路径,名称):
# 法官
如果 os.path.exists(path):
经过
别的:
os.mkdir(路径)
响应=requests.get(url)
如果 response.status_code==200:
以 open(path+'/%s'%name,'ab') 作为文件:
对于 response.iter_content() 中的数据:
file.write(数据)
# 清空缓存
文件.flush()
print('%s 下载完成!'%name)
数据块处理
图片
第四步:代码整理
对于 img_url 中的 img_urls:
标题,img=get_img_urls(img_urls)
对于 img.keys() 中的 img_url_item:
path='/Users/lucky/PycharmProjects/Module_Tony_Demo/Module_12_24/tony_img/%s'%title
download_pic(url=img_url_item,path=path,name='%s.jpg'%(title+img_url_item))
显示结果
全效
图片
在这个浮躁的时代;还是有人能坚持章节原创;
如果这篇文章对你的学习有帮助——你可以点赞+关注!更多新的 文章 将不断更新。
支持原创。感激!