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

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

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

支持原创。感谢!

相关文章
|
5月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
5月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
2975 1
|
5月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
598 0
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
5月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
6月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
900 19
|
5月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
6月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
5月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。

推荐镜像

更多