最详细的爬虫实战 | 手把手教你用Python爬虫(附详细源码)

超详细!Python爬虫实战案例 阅读详情

什么是爬虫?

 

实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就…

在这里插入图片描述

 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。一句话概括就是网上信息搬运工。

我们再来看下爬虫应该遵循的规则:robots协议是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。一句话概括就是告诉你哪些东西能爬哪些不能爬。

了解了定义和规则,最后就是熟悉爬虫的基本原理了,很简单,作为一名灵魂画手,我画个示意图给你看下就明白了。

在这里插入图片描述

 (⊙o⊙)…尴尬,鼠标写字咋这么丑,都不好意思说自己学过书法,好一个脸字打得呱呱响。

项目背景

理论部分差不多讲完了,有些小朋友估计要嫌我啰嗦了,那就不废话,直接讲实操部分。本次爬虫小项目是应朋友需求,爬取中国木材价格指数网中的红木价格数据,方便撰写红木研究报告。网站长这样:

在这里插入图片描述

所需字段已用红框标记,数据量粗略看了下,1751页共5万多条记录,如果你妄想复制粘贴的话,都不知道粘到猴年马月了。而python只要运行几分钟就能把所有数据保存到你的excel里,是不是很舒服?


项目实战

工具:PyCharm

Python版本:Python 3.7

浏览器:Chrome (推荐)

对于第一次写爬虫的朋友可能觉得很麻烦,咱不慌,由浅入深,先爬一页数据试试嘛。

一、爬取一页

首先,我们需要简单分析下网页结构,鼠标右键点击检查,然后点击Network,刷新网页,继续点击Name列表中的第一个。我们发现此网站的请求方式为GET,请求头Headers反映用户电脑系统、浏览器版本等信息。

在这里插入图片描述

 接着,把爬虫所需的库都pip安装一下并导入,所有库的功能都有注释。

import csv  #用于把爬取的数据存储为csv格式,可以excel直接打开的
import time  #用于对请求加延时,爬取速度太快容易被反爬
from time import sleep #同上
import random  #用于对延时设置随机数,尽量模拟人的行为
import requests  #用于向网站发送请求
from lxml import etree    #lxml为第三方网页解析库,强大且速度快

构造请求url,添加头部信息headers即复制前文标记的User-Agent,通过requests.get方法向服务器发送请求,返回html文本。添加headers目的在于告诉服务器,你是真实的人在访问其网站。如果你不添加headers直接访服务器,会在对方服务器显示python在访问,那么,你很可能会被反爬,常见的反爬就是封你ip。

url = 'http://yz.yuzhuprice.com:8003/findPriceByName.jspx?page.curPage=1&priceName=%E7%BA%A2%E6%9C%A8%E7%B1%BB'
headers = {
    'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
}
response = requests.get(url, headers=headers, timeout=10)
html = response.text  
print(html)

我们运行下以上代码,看下效果:

在这里插入图片描述

 看到这个,第一次接触爬虫的朋友可能会有点懵。

在这里插入图片描述

 其实这就是网页源代码,咱们右键打开下源代码看一哈。

在这里插入图片描述

长这样:

在这里插入图片描述

 而我们需要提取的数据,就潜藏在这网页源代码中,我们要用lxml库中的etree方法解析下网页。

parse = etree.HTML(html)  #解析网页

解析完之后,就可以开开心心的提取我们所需要的数据了。方法很多,比如xpath、select、beautiful soup,还有最难的re(正则表达式)。本文爬取的数据结构较为简单,就直接用xpath玩一下吧。

在这里插入图片描述

我们发现,每一行数据对应源码里的一个id=173200的tr,那就先把这些tr都提取下来。

all_tr = parse.xpath('//*[@id="173200"]')

 有些小伙伴不会写xpath。

在这里插入图片描述

 那就找个简单办法,直接copy所需的xpath。

在这里插入图片描述

所有tr都提取下来了,接下来就得依次从tr里面提取具体字段了。比如提取商品名称字段,点开第一个tr,选中商品,copy其xpath。其他字段同理。

在这里插入图片描述

 以下要注意几点,tr={key1 : value1, key2 : value2 }是python的字典数据类型(你也可以根据自己兴趣或需要存为列表或元组类型)。‘’.join是指把获取到的列表转为字符串。./是指继承前面的//*[@id=“173200”],strip()表示对提取的数据进行简单的格式清洗。 

for tr in all_tr:
    tr = {
        'name': ''.join(tr.xpath('./td[1]/text()')).strip(),
        'price': ''.join(tr.xpath('./td[2]/text()')).strip(),
        'unit': ''.join(tr.xpath('./td[3]/text()')).strip(),
        'supermaket': ''.join(tr.xpath('./td[4]/text()')).strip(),
        'time': ''.join(tr.xpath('./td[5]/text()')).strip()
    }

咱们打印一下print(tr),看下效果。

在这里插入图片描述

此时,你的心情也许是这样的:

在这里插入图片描述

 但还没完,数据有了,咱们还得保存csv格式到本地,这一步比较简单,直接贴代码。

with open('wood.csv', 'a', encoding='utf_8_sig', newline='') as fp:
    # 'a'为追加模式(添加)
    # utf_8_sig格式导出csv不乱码
    fieldnames = ['name', 'price', 'unit', 'supermaket', 'time']
    writer = csv.DictWriter(fp, fieldnames)
    writer.writerow(tr)

 打开下刚生成的wood.csv,长这样:

在这里插入图片描述

二、爬取多页

别开心的太早,你还仅仅是爬了一页数据,人家复制粘贴都比你快。咱们的志向可不在这,在诗和远方,哦不,是秒速爬海量数据。

那么,怎么才能爬取多页数据呢?没错,for循环。

我们再回过头来分析下url:

http://yz.yuzhuprice.com:8003/findPriceByName.jspx?page.curPage=1&priceName=%E7%BA%A2%E6%9C%A8%E7%B1%BB

 我们把里面的page.curPage改成2试试,如下:在这里插入图片描述

你也许发现玄机,只要改变page.curPage就可以实现翻页。OK,那我们直接在url前面加个循环就好啦。format(x)是一种格式化字符串的函数,可以接受不限个数的参数。 

for x in range(1,3):
    url = 'http://yz.yuzhuprice.com:8003/findPriceByName.jspx?page.curPage={}&priceName=%E7%BA%A2%E6%9C%A8%E7%B1%BB'.format(x)

至此,你只要改变range想爬多少页就爬多少页,开不开心?意不意外?

三、完善爬虫

如果仅仅按照以上代码爬虫,很有可能爬了十几页程序就崩了。我就多次遇到过中途报错,导致爬虫失败的情况。好不容易写出的爬虫,怎么说崩就崩呢。

在这里插入图片描述

报错原因就很多了,玩爬虫的都知道,调试bug是很麻烦的,需要不断试错。这个爬虫的主要bug是TimeoutError。因此,我们需要进一步完善代码。

在这里插入图片描述

 首先,要将以上代码封装成函数,因为不用函数有以下缺点:

1、复杂度增大

2、组织结构不够清晰

3、可读性差

4、代码冗余

5、可扩展性差

其次,在可能出现报错的地方都加上异常处理。即try…except。

在这里插入图片描述

 完善之后,截取部分,如上图,限于篇幅,我就不贴所有代码了,需要完整代码的朋友可以点击下面的链接前往免费获取!

点击免费领取《优快云大礼包》:

最新全套【Python入门到进阶资料 & 实战源码 & 安装工具】https://mp.weixin.qq.com/s/9IuSexhanYZ1TMAF1MZIhw

Python学习资源及经验总结

如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,我也为大家整理了一份【最新全套Python学习资料】一定对你有用!

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的!

1、学习时间相对较短,学习内容更全面更集中

2、可以找到适合自己的学习方案

这份资料包含:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程,带你从零开始系统性的学好Python!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python课程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

img

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、清华编程大佬出品《漫画看学Python》

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

img

五、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、互联网企业面试真题

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

这份完整版的Python全套学习资料已经上传至优快云官方,朋友们如果需要可以点击下方链接费获取【保证100%免费】

点击免费领取《优快云大礼包》:

最新全套【Python入门到进阶资料 & 实战源码 & 安装工具】https://mp.weixin.qq.com/s/9IuSexhanYZ1TMAF1MZIhw

以上全套资料已经为大家打包准备好了,希望对正在学习Python的你有所帮助!


如果你觉得这篇文章有帮助,可以点个赞呀~

我会坚持每天更新Python相关干货,分享自己的学习经验帮助想学习Python的朋友们少走弯路!

【Python爬虫系列】浅尝一下爬虫40例实战教程+源代码【基础+进阶】 好啦!上面都是小编整理的一些简单的爬虫实战案例,如果你是新手还没有安装那就先找小编拿最基础的新手大礼包叭~像试试简单的爬虫项目的就可以直接开干啦👇学习学习👇。 阅读详情

相关推荐

python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)

大家好,我是J哥,专注原创,致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货,希望人人都能学到新知识。最近J哥做了个爬虫小项目,感觉还挺适合新手入门的,于是迫不及待想分享给大家。什么是爬虫?实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就...首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经...

weixin_42548961的博客 2816

Python网络爬虫实战项目大全!

学习Python主要是爬取各种数据,进行数据分析,获得各种。今天我们就来做些Python实战项目,包含微信公号、豆瓣、知乎等网站爬虫,大家也要自己动手练练看呀。

xiangxueerfei的博客 1941

五分钟学会Python网络爬虫

但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。 什么是爬虫 网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 大数据时代,要进行数据分析,首先要有数据源,可数据源从哪里来,花钱买,没预算,只能从其它网站就行抓取。 细分下来,业内分为两类:爬虫和反爬虫。 反爬虫:顾名思义,就是防止你来我网站或APP上做爬虫的。 爬虫工程师和反爬虫工程师是一对相爱相杀的小伙伴,经常因为对方要加班写代码,

python588的博客 2355

python爬虫——实战篇

python爬虫——实战篇2021.7.20晚已更新注:注释和说明已在代码中注释。

zero2100的专栏 1308

性能优化误区:过早优化与JVM参数盲调

场经验分享,Java面试,简历修改,求职辅导尽在。

Why_does_it_work的博客 8万+

Python网络爬虫实战项目与源码解析

网络爬虫(Web Crawler)是指自动从互联网上抓取网页数据的程序,其发展历程从早期的简单页面抓取逐步演进为如今的智能化、分布式采集。Python凭借其简洁的语法、丰富的第三方库(如requests、BeautifulSoup、Scrapy等)成为爬虫开发的首选语言,极大降低了开发门槛并提升了效率。网络爬虫的基本工作流程包括:发送请求、获取响应、解析内容、数据存储。其应用场景广泛,涵盖搜索引擎、电商比价、舆情监控、金融数据分析等多个行业。

weixin_36364707的博客 2265

实战|手把手教你用Python爬虫(附详细源码)

我们准备了一门非常系统的爬虫课程,除了为你提供一条清晰、无痛的学习路径,我们甄选了最实用的学习资源以及庞大的主流爬虫案例库。短时间的学习,你就能够很好地掌握爬虫这个技能,获取你想得到的数据。

大模型教程的博客 7万+

模仿学习与强化学习结合(IL+RL)有没有代表性论文?未来发展趋势如何?

IL与RL的结合正成为AI研究热点,尤其在机器人控制、复杂博弈等需要边学边练的场景。经典方法如Dagger(2010)和GAIL(2016)开创了先用模仿学习预热、再用强化学习微调的模式。近期工作如IN-RIL(2024)提出交替训练策略,显著提升样本效率。开源项目RoboSchool和StableBaselines3为相关研究提供支持。未来趋势包括:1)混合式智能体结合人类经验与自主探索;2)突破小样本学习、自然语言交互等方向;3)提升安全性、样本效率和可解释性。

CyberSoma的博客 2249

保姆级教学,手把手教你用Python爬虫(附详细源码)

什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就… 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。一句话概括就是网上信息搬运工。 我们再来看下爬虫应该遵循的规则:robots协议是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎

查理不是猹的博客 8436

ROS实践(四)机器人SLAM建图(gmapping)

本文介绍了SLAM技术及其实现方法。SLAM(同步定位与地图构建)让机器人在未知环境中通过传感器数据自主定位并构建地图。文章详细讲解了激光雷达、RGBD相机等常用传感器,以及gmapping和map_server这两个ROS功能包的使用方法。重点阐述了SLAM建图实验步骤:配置gmapping节点参数、启动机器人仿真、运行gmapping节点、使用rviz可视化工具、通过键盘遥控机器人完成地图构建并保存。实验结果表明,该方法能有效实现机器人自主建图功能,为后续导航等应用奠定基础。

qq_1033275663的博客 4335

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

爬虫实战|手把手教你用Python爬虫(附详细源码)

实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就…

Python966的博客 4152

Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

liuning1985622的博客 956

爬虫实战 手把手教你用Python爬虫(附详细源码)_爬虫源码(1)

实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就…首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。一句话概括就是网上信息搬运工。

2401_84140687的博客 1671

【Linux 驱动开发】STM32MP1 LCD 显示系统完整实践指南

STM32MP1 LCD显示系统实践指南 本文全面介绍STM32MP1平台实现MIPI DSI LCD显示的完整流程,涵盖硬件连接、设备树配置、显示原理和驱动实现。主要内容包括: 硬件连接:详细说明MIPI DSI差分对、背光PWM、复位/供电管脚的连接方式 设备树配置: PWM背光控制节点设置 LTDC与DSI端口映射关系 Panel节点参数定义 显示基础:讲解LCD/OLED显示原理、常见接口类型(RGB/LVDS/MIPI/HDMI)及信号时序 驱动实现。

猫猫的小茶馆 495

[运动规划算法]基于飞行走廊的轨迹优化

文章目录简介一、介绍二、原理飞行走廊生成三、项目演示参考 简介 Btraj是一个在线的四旋翼无人机的运动规划框架,主要用于未知环境中的自主导航。基于机载状态估计和环境感知,采用基于快速行进(FM *)的路径搜索方法,从基于构建的欧氏距离场(ESDF)中寻找路径,以实现更好的时间分配。通过对环境进行膨胀生成四旋翼无人机的飞行飞行走廊。使用伯恩斯坦多项式将轨迹表示为分段Bezier曲线,并将整个轨迹生成问题转换成凸问题。通过使用Bezier曲线,可以确保轨迹的安全性和高阶动力学可行性,可以将轨迹完全限制在安全

xiewf的博客 8063

从入门到精通:网络爬虫开发实战总结

学习是一种持续不断的过程,无论在什么领域,都需要不断地努力和探索。在这段爬虫学习历程中,我不仅获得了丰富的知识和技能,也结交了很多志同道合的朋友和粉丝,他们对我的学习和进步都提供了极大的支持和鼓励,支持我继续写下去。 总的来说,这段时间的学习和写作让我认识到了自己的不足和缺陷,也让我更加坚定了继续学习和进步的决心。我相信,在未来的学习和工作中,这段经历将成为我前行的动力和支撑。在这里,我将过去写过的爬虫文章总结一下,不仅是在爬虫学习这里留下一个里程碑,也是为了能够总结一下阶段性学习成果。

weixin_50804299的博客 6560

YOLO26改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制

本文记录的是利用模块优化的目标检测网络模型。模块具有独特优势。它不同于传统模块,能同时兼顾局部特征高效建模与长距离交互学习。常见模块要么在局部特征处理上有优势但长距离交互能力弱,要么反之,而模块克服了此问题。它融合了Mamba模型和线性注意力机制的优势,通过独特的结构设计,能够在保持计算效率的同时,精准地建模局部特征并学习长距离交互信息。本文将其用于的模型改进和二次创新,能够更加关注图像中的重要特征区域,抑制背景等无关信息的干扰,从而突出目标物体的关键特征。Demystify Mamba in Vision

Limiiiing的博客 213

手把手教你利用Python网络爬虫获取旅游景点信息

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤桃之夭夭,灼灼其华。/1 前言/当我们出去旅游时,会看这个地方有...

pdcfighting的博客 6566

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: Python开发一个炸金花小游戏,注意别玩上瘾了!
下一篇: 经验分享|如何高效学Python?转行学习Python的朋友看过来
程序员源源
博客等级 码龄4年 76粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值