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

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

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

支持原创。感谢!

相关文章
|
17天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
9 1
|
2天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
3天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
13天前
|
数据采集 Python
python爬虫抓取91处理网
本人是个爬虫小萌新,看了网上教程学着做爬虫爬取91处理网www.91chuli.com,如果有什么问题请大佬们反馈,谢谢。
24 4
|
15天前
|
数据采集 Java Python
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
在信息化时代,实时数据的获取对体育赛事爱好者、数据分析师和投注行业至关重要。本文介绍了如何使用Python的`ThreadPoolExecutor`结合代理IP和请求头设置,高效稳定地抓取五大足球联赛的实时比赛信息。通过多线程并发处理,解决了抓取效率低、请求限制等问题,提供了详细的代码示例和解析方法。
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
|
15天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
34 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
1天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
8 0
|
7天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
46 6
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
165 4

热门文章

最新文章