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

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

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

支持原创。感谢!

相关文章
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
1天前
|
数据采集 存储 数据挖掘
深入剖析 Python 爬虫:淘宝商品详情数据抓取
深入剖析 Python 爬虫:淘宝商品详情数据抓取
|
4天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
1月前
|
数据采集 人工智能 自然语言处理
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
FireCrawl 是一款开源的 AI 网络爬虫工具,专为处理动态网页内容、自动爬取网站及子页面而设计,支持多种数据提取和输出格式。
305 19
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
30天前
|
数据采集 JSON 数据格式
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
|
1月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
89 3
|
2月前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
2月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。

推荐镜像

更多