Python爬虫系列5-动态抓取网站核心数据-流处理

简介: 每个人都需要互相帮助,而我要做的就是把它呈现出来让大家看到。 比如:你背不下来的书,总有人能背下来,你做不出来的题,总有人能做出来,你愿意拖到明天的事,总有人今天努力做完,那么抱歉,你想要的工作也只能别人干了,你想过的人生也只能别人过了!师者传道授业解惑。传播的力量就是要把这些东西渗透下去,然后才能长出新的叶子。 共勉!

-实战

分析网站结构,确定我们要抓取的数据内容;

image.png

唯美图片就是追求绝对性的美感,强调超乎于生活中的纯粹性美感,是以不断追求形式完美及艺术技巧完美的展现,更高一层次就是让其脱离现实中的技巧美。
image.png

通过 Chrome 浏览器右键检查查看 network 并对网站结构进行分析;发现这个网页中蕴含的内容非常的多,如果只是单纯获取单个页面中的图片数据是非常简单的,但是 这是我们的风格吗?不是;绝对不是。即使是特别简单的逻辑,咱们也要变着花样的给它弄复杂,这就是Tony老师的编程;追求纯粹的技术。

希望能够为更多的编程从业者带来一些高质量的文章。

第一步:请求网络,获取服务器返回数据

不管三七二十一我们先获取到数据内容再说;因为在检测网站有否有反爬存在的唯一因素就是获取一下它的数据内容;看是否能够正常获取。

这里需要安装2个库:

pip install requests 网络请求库
pip install lxml 数据解析库
    import requests
    
    url='http://www.mmonly.cc/wmtp/'
    html=requests.get(url).content.decode('gbk')
    print(html)
   

接下来通过分析;看到该网站中的所有内容页数非常的多有1153页数据,所以我就想,如果只是简单的获取几页数据内容,这样确实非常的省事!但是我如果在抓取其他页面的话,岂不是还要担心它有没有那么多的数据;毕竟每一页的数据内容是不一样的; 这样 肯定不能满足我对于技术的渴望 ,那么......
image.png

image.png

第二步:解析数据

from lxml import etree
# 动态获取末页数据
page=etree.HTML(html).xpath('//a[@text="末页"]/@href')[0].split('_').split('.')[0]
# list_20_1153.html   ---> 1152
print(page)

接下来在处理的时候,第一页数据和第二页数据的url是不同的;而单独获取是拿不到第二页及之后所有页面的数据;如此...只能拼接了。

http://www.mmonly.cc/wmtp/;
http://www.mmonly.cc/wmtp/list_20_2.html;   
http://www.mmonly.cc/wmtp/list_20_3.html;
    url_list=[]
    url='http://www.mmonly.cc/wmtp/'
    url_list.append(url)
    html=requests.get(url).content.decode('gbk')
    # print(html)
    # 谓语
    page=etree.HTML(html).xpath('//a[@text="末页"]/@href')[0].split('_').split('.')[0]
    
    for item in range(2,int(page)+1):
        url_list.append(url+'list_20_{}.html'.format(str(item)))
    print(url_list)

image.png

到这里我们已经能够动态的获取到所有页面的链接了;很开心有没有👍;至此;我们已经跨越出了第一步;;之后,我们需要在次获取各个页面的图片详情页中为下一步的数据处理做准备。

    for url_item in url_list:
       img_url=etree.HTML(requests.get(url_item).text).xpath('//div[@class="ABox"]/a/@href')
       print(img_url)

image.png

image.png

每个网站数据的突破,跟我们获取战利品一样。技术就是这样容易让人着迷。

接下来越来越有意思了! 我们需要再一次的对网站详情页进行分析;在分析的过程中我发现一件很有意思的事情;就是网站详情页的方式跟我们之前获取的方式很类似......emmmmmm🤣,这里就不详细阐述了!大家自己分析一下就知道了。

image.png

image.png

那么...为了让程序越来越好玩;接下来,我们换一种方式;


# 单个文件详情页中
def get_img_urls(img_urls):
    html=requests.get(img_urls)
    html.encoding='gbk'
    data=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]
    print(title,page)
    for item in range(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]
    return title,img

第三步:数据存储

在下载数据这一块;考虑到我要下载的数据图片-->是原图,而很多图片的内存占比是不同的;倘若文件过大很有可能就会导致内存不足;我们在学习的时候,不用去考虑这一因素,但是 Tony 老师不这样想;因为如果有一天大家真正的学有所获,进入到了企业;这个时候是必须要考虑程序优化问题的;能够更好的让我们写出高质量的代码程序;这也是考验我们基本功是否真的扎实;我们在下载大文件时为了防止它占用过多的内存;于是我做了数据流的操作处理

# 下载图片
def download_pic(url,path,name):
    # 判断
    if os.path.exists(path):
        pass
    else:
        os.mkdir(path)
    
    response=requests.get(url)
    if response.status_code==200:
        with open(path+'/%s'%name,'ab')as file:
            for data in response.iter_content():
                file.write(data)
                # 清空缓存
                file.flush()
    print('%s下载完成!'%name)
    

数据块处理

image.png

第四步:代码整理

for img_urls in img_url:
   title, img=get_img_urls(img_urls)
   for img_url_item in img.keys():
       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))

效果展示

完整效果

image.png

在这个浮躁的时代;竟然还有人能坚持篇篇原创;

如果本文对你学习有所帮助-可以点赞👍+ 关注!将持续更新更多新的文章。

支持原创。感谢!

相关文章
|
30天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
7天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
29天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
62 3
|
2月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
89 0
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
116 6
|
5月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
250 4
|
5月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
6月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
101 4
|
3月前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
216 66