python零基础爬虫教程,(实战案例手把手教你Python爬虫教程!)

 

前言
女朋友看了都能学会的爬虫教学
自己断断续续学习练习了两三年python爬虫,从网上看了无数教程,跟大神们学习了各种神奇的操作,现在虽然没成为大神,但是想通过这篇教程来分享自己学习的爬虫实战案例。
通过本教程,你将学会如何用Python爬虫从网络上爬取你想要的电影下载资源。本案例以00电影网为例进行爬取,当然你可以修改代码爬取你想要的任何内容。
如果你是零基础,请从头阅读,如果你有些基础,可以选择部分阅读。
第一章 你需要的环境和软件
python3.5
既然我们是python爬虫,那必然需要python了。我用的是3.5.3版本

官方下载链接点这个链接并下拉翻到图中位置

点击红框里的链接进行下载,如果你是64位系统就点第一个,如果你是32位系统就点第二个

下载完成后是一个.exe文件,双击运行,开始安装,一路下一步就可以了,这里我没法一步步演示,如果遇到问题可以留言保证第一时间回答(我也从小白一路走过来,能体会遇到问题时的心情)

pycharm community 2017
这个呢是一个代码编辑器,可以大大提高编程效率

同样是去官网下载,并且community版本是免费的,完全够用

官网下载地址 点进去之后如图所示

确保你选择了红框的位置,然后点击download就可以下载了

下载完成后双击打开安装程序,依然是一直点下一步就好了,当然也有一些自定义选项你可以自己选择

环境配置
到这里我们的软件就安装好了

接下来就是环境配置,这一步的目的是让pycharm和python配合

首先,为了实现爬虫程序,我们需要给python安装一些工具包,操作非常简单

在开始菜单搜索cmd并回车,打开终端命令行窗口

手动输入 pip3 install -------------- 并回车

本文案例中需要两个库安装如下

pip3 install requests

pip3 install Beautifulsoup4 这两句要分别运行,等一句安装成功了再运行另一句

然后等待安装,成功后会提示下图字样

第二章 开始写python爬虫
问题分析
在做任何爬虫之前,我们都要先了解你爬取的网站的源码,根据源码来找到你想爬取的内容在什么位置

那么首先我们来看看目标网站的页面源码目标网站,点击这个网址打开网页,然后按F12键打开开发者模式,如图所示

图中,中间靠右侧的红色框里就是我们主要查看的内容,你要从这里面的代码中找到你想要的内容才可以进行爬取。

这里,我们的目标是搜索电影资源并保存下来。可以看到,网页中间有一个搜索框,输入电影名字点击搜索之后,会跳出搜索结果的页面,然后点击搜索结果就进入了该电影的详情页,并且有下载链接,如图所示

这里我们搜索的是霸王别姬。

由上述过程,可以明确我们要写一个Python爬虫程序,让爬虫来代替我们去搜索和获取电影的下载链接,这就是我们接下来编程的指导思想,告诉你的程序让他去做什么。

总结一下,我们的爬虫要做下面这几件事情:

1、打开目标网页
2、找到搜索框
3、提交搜索电影名并打开搜索结果页面
4、进入搜索电影详情页
5、找到下载链接位置并把所有链接保存到本地电脑上
编程实现爬虫
1、打开目标网页
打开pycharm左上角菜单栏以此点击file-->new project

在弹出的对话框中,设置项目路径,这里命名为spider,然后点击create

稍等几秒项目就建立完成了,这时候在左边资源管理器栏会出现spider项目文件夹,在spider上面右键-->new-->Python file来创建一个python程序脚本文件,命名为spider

然后就可以开始教我们的爬虫做事了

复制下面代码到spider.py中

# 导入之前安装的库
import requests
from bs4 import BeautifulSoup# 首先定义以个变量url并赋值为目标网站'http://www.0011kytt.com'以及要搜索的电影名movie_name
# 注意引号,字符串必须用引号包围起来
movie_name = '霸王别姬'
url = 'http://www.0011kytt.com'
# 然后用request.get()来获取网页
r = requests.get(url)
# 这里要根据网页的编码来设置解码,这个目标网站编码为'utf-8'
r.encoding = 'utf-8'
# 然后获取网页源码并赋值给变量html
html = r.text
# 最后打印出网页源码
print(html)

然后右键spider.py脚本文件,点击 run 'spyder.py' 即可运行

运行结果在下面控制台栏显示,如图所示

可以看到我们的爬虫乖乖爬到了网页的源码,跟浏览器中按F12得到的是一样的,这一步大功告成。

2、找到搜索框
这一步就要指挥我们的小爬虫根据刚才得到的源码去找搜索框了

小爬虫它怎么会知道搜索框在哪里呢,当然是我们告诉它啊,那我们怎么知道呢,OK,回到浏览器按F12,在红框源码部分把鼠标指针放上去挨着找,鼠标指针位置对应的网页部分会变灰色,点击源码上的小三角可以展开所有内容,方便我们查找,如图所示

咦,找到了耶,好神奇有没有

现在我们知道了原来搜索框在这个网页源码的<div class="search_box">这个部分,OK,去告诉那个智障小爬虫

# 这里利用BeautifulSoup库来解析网页的源码并赋值给soup,方便后面的寻找
soup = BeautifulSoup(html, "lxml")
# 因为我们已经知道搜索框在一个叫<div class="search_box">的地方
# 所以根据class="search_box"来找就好了
# 注意,因为class是python关键字,所以这里要用class_,这是BeautifulSoup的规定
search_box = soup.find(class_='search_box')
# OK 打印出来看看找得对不对
print(search_box)

复制这段代码到spider.py中,粘贴到上一段代码后面,然后跟上面一样点击运行,得到结果如图

不得了了,这个智障爬虫已经学会找到搜索框了,OK,这一步又大功告成

3、提交搜索电影名并打开搜索结果页面

我们的小爬虫长进不小,继续教他怎么把电影名字填进搜索框然后点击搜索

再回到浏览器F12界面,我们再来找填电影名的位置以及搜索按钮的位置,如图

苏菲玛索也太好看了吧  忍不住截出来给大家看看  乌蝇哥乱入 这网页做的什么鬼

说正事

我们已经找到输入位置和搜索按钮位置分别在<input>和<button>中

另外,我们研究一下这个网站的搜索功能,先随便搜索一个霸王别姬吧,说姬不说吧文明你我他,如图

从图中看到,网站链接变了,搜索页面变为了php文件,记录下这个url

还不赶紧告诉你的智障爬虫,作为父亲就得手把手教他

# 网站搜索页面的url为http://www.0011kytt.com/search/search.php
search_url = 'http://www.0011kytt.com/search/search.php'
# 从网页源码里看到输入位置的input中有个name='keywords'
# 这个keywords就是用来记录我们输入电影名的变量
# 于是,我们构造以下变量,用来让爬虫往搜索框填电影名
formdata = {'type': 'text','keywords': movie_name}
# requests.post就可以把formdata填进搜索框,并得到搜索结果页面赋值给r_r
r_r = requests.post(search_url, formdata)
# 同样需要解码
r_r.encoding = 'utf-8'
# 获取网页源码并赋值给变量html
r_html = r_r.text
# 打印看看对不对
print(r_html)

复制代码到spider.py中,贴在上一段代码后面,然后运行,得到结果如下图

哎哟,不得了了,我们的爬虫会自己搜索了呢!

从图中可以看到,霸王别姬的详情页链接就在<div class='item_pic'>的<a href=**********>中,那就好办了呀,直接让爬虫获取链接并打开

# 首先还是用BeautifulSoup库来解析网页的源码
r_soup = BeautifulSoup(r_html, "lxml")
# 再根据class_='item_pic'找到所有搜索结果,有可能搜索到多个匹配的结果
movie_div_list = r_soup.find_all(class_='item_pic')
# 创建一个空的列表movie_url_list来存储搜索结果的详情页链接
movie_url_list = []
# 因为有可能搜索到多个匹配的结果
# 所以这里用一个循环来获取所有搜索结果的电影详情页链接
for movie_div in movie_div_list:# 对每一个搜索结果,找到其中的href里存着的详情页链接movie_url = movie_div.a.attrs['href']# 把详情页链接存到movie_url_list中movie_url_list.append(movie_url)
# OK 打印看看所有搜索结果的详情页链接
print(movie_url_list)

同上点击运行,结果如下

可以看到列表中只有一个链接,因为霸王别姬搜索结果只有一个。。。

4、进入搜索电影详情页

这一步很简单,只要request详情页链接得到详情页源码,跟我们去浏览器手动F12得到的源码比较一下,如果一样那就说明成功了

# 这一步得构造详情页的链接,因为上一步得到的链接只是网站的相对路径我们是无法直接访问的
# 因为上一步的搜索结果可能有好几个,所以还是构造循环程序
for movie_url in movie_url_list:# 构造详情页链接movie_url = url + movie_url# 直接 requests.get获取网页r_m = requests.get(movie_url)# 同样需要解码r_m.encoding = 'utf-8'# 获取网页源码并赋值给变量htmlm_html = r_m.text# 打印看看对不对print(r_html)

同上复制到spider.py并运行得到结果如下(篇幅限制截图一部分)

然后到霸王别姬的详情页霸王别姬按F12查看源码,比较之后完全一样,这一步又大功告成,你的智障爬虫离幼儿园毕业只差一步了!

5、找到下载链接位置并把所有链接保存到本地电脑上
这一步,我们要指挥爬虫去爬取详情页的所有下载链接并保存到自己电脑上

首先,我们还是得自己先看一下详情页源码,找到下载链接的位置,再告诉即将幼儿园毕业的爬虫

可以看到,所有的下载链接都在<a class="dwon1">中的href里面,哇,这就好办了,赶紧告诉你的爬虫去

    # # 首先还是用BeautifulSoup库来解析网页的源码m_soup = BeautifulSoup(m_html, "lxml")# 根据<title>取得电影名,方便保存下载链接时文件命名name = m_soup.find('title').text.split('-')[1]# 再根据class_='dwon1'找到所有下载链接movie_down_list = m_soup.find_all(class_='dwon1')# 创建一个空的列表down_url_list来存储搜索结果的详情页链接down_url_list = []# 继续循环爬取下载链接并保存到down_url_listfor movie_down in movie_down_list:# 提取href中的下载链接down_url = movie_down.attrs['href']# 把下载链接保存到down_url_list中,并在每个链接后面加一个换行符'\n'down_url_list.append(down_url + '\n')# 接下来就是把下载链接都保存到'电影名.txt'中with open(name+'.txt', 'w') as f:f.writelines(down_url_list)

这里注意!注意!注意!这部分代码跟上部分代码都在同一个循环中!!!!

为了方便小白使用,请将第4步中的代码从spider.py中删除!并且!!复制下面这段完整的代码到刚才删除的位置!!!然后运行即可

# 这一步得构造详情页的链接,因为上一步得到的链接只是网站的相对路径我们是无法直接访问的
# 因为上一步的搜索结果可能有好几个,所以还是构造循环程序
for movie_url in movie_url_list:# 构造详情页链接movie_url = url + movie_url# 直接 requests.get获取网页r_m = requests.get(movie_url)# 同样需要解码r_m.encoding = 'utf-8'# 获取网页源码并赋值给变量htmlm_html = r_m.text# 打印看看对不对# print(m_html)# # 首先还是用BeautifulSoup库来解析网页的源码m_soup = BeautifulSoup(m_html, "lxml")# 根据<title>取得电影名,方便保存下载链接时文件命名name = m_soup.find('title').text.split('-')[1]# 再根据class_='dwon1'找到所有下载链接movie_down_list = m_soup.find_all(class_='dwon1')# 创建一个空的列表down_url_list来存储搜索结果的详情页链接down_url_list = []# 继续循环爬取下载链接并保存到down_url_listfor movie_down in movie_down_list:# 提取href中的下载链接down_url = movie_down.attrs['href']# 把下载链接保存到down_url_list中,并在每个链接后面加一个换行符'\n'down_url_list.append(down_url + '\n')# 接下来就是把下载链接都保存到'电影名.txt'中with open(name+'.txt', 'w') as f:f.writelines(down_url_list)

至此大功告成了!你的智障爬虫终于幼儿园毕业了!后面就要靠他自己悟了!

最后这里给大家免费分享一份Python学习资料,包含了视频、源码、课件,希望能够帮助到那些不满现状,想提示自己却又没用方向的朋友,也可以和我一起来交流呀!

编辑资料、学习路线图、源代码、软件安装包等!【点击这里】领取!

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

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

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

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

图片

四、入门学习视频全套

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

图片

图片

五、实战案例

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

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux程序替换

前言 上一期对进程的创建、终止、以及等待做了详细的介绍&#xff0c;对于进程控制的内容基本介绍的差不多了&#xff0c;本期来介绍进程控制的最后一个内容即进程的程序替换&#xff01; 本期内容介绍 • 什么是进程的程序替换 • 单进程的程序替换 • 程序替换的基本原理 •…

在 IVS 2024 加密盛会上开拓创新:CESS 引领去中心化云存储和 CD²N 之发展

作为基于区块链的去中心化云存储网络和 CDN 基础设施网络&#xff0c;CESS 在日本年度加密创业大会 IVS 2024 上成为焦点&#xff01;此次活动在历史悠久的京都举办&#xff0c;围绕“跨越边界”这一主题&#xff0c;吸引了超过15,000 名参会者&#xff0c;其中包括 3,000 创始…

SpringCloudAlibaba基础五 Nacos配置中心

一 Nacos配置中心介绍 官方文档&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config Nacos 提供用于存储配置和其他元数据的 key/value 存储&#xff0c;为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos C…

2024 福州市延安中学“拿云杯”复赛试题

回忆版&#xff08;持续更新&#xff09; 目录 答案 答案

风光摄影:相机设置和镜头选择

写在前面 博文内容为《斯科特凯尔比的风光摄影手册》读书笔记整理涉及在风景拍摄中一些相机设置&#xff0c;镜头选择的建议对小白来讲很实用&#xff0c;避免拍摄一些过曝或者过暗的风景照片理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好…

【matlab】周期性信号分析

目录 信号预处理 周期性特征提取方法 频谱分析 傅里叶变换 快速傅里叶变换&#xff08;FFT&#xff09; 周期图法 Welch法 自相关分析 时频分析 基于模型的方法 时间序列分解 应用实例 提取信号的周期性特征是一个在信号处理领域广泛应用的技术&#xff0c;特别是在…

每日一练:奇怪的TTL字段(python实现图片操作实战)

打开图片&#xff0c;只有四种数字&#xff1a;127&#xff0c;191&#xff0c;63&#xff0c;255 最大数字为255&#xff0c;想到进制转换 将其均转换为二进制&#xff1a; 发现只有前2位不一样 想着把每个数的前俩位提取出来&#xff0c;组成新的二进制&#xff0c;然后每…

做3D渲染,选择什么显卡好?

对于设计行业的小伙伴来说&#xff0c;电脑配置的优劣是个尤为关键的要素&#xff0c;特别是显卡&#xff0c;对于很多人而言&#xff0c;如何选择一张最适合的 3D 渲染显卡确实一大难关&#xff01; 在目前市场上&#xff0c;主流的显卡分别是 AMD 显卡和 NVIDIA 显卡&#x…

Java基础面试题大全

Java基础 语法基础 aab 和 ab 操作隐式的将操作的结果类型强制转换成持有结果的类型&#xff0c;而不会 比如对byte&#xff0c;short&#xff0c;int类型的操作&#xff0c;会先将他们提升到int类型&#xff0c;然后在执行操作。所以比如我定义了两个byte类型的a和b&#x…

KEIL 5项目中源文件图标带有雪花(四叶草)消除办法

今天在使用KEIL 5写STM32程序的时候&#xff0c;出现了一个错误&#xff1a; Error: L6218E: Undefined symbol test_for_diaodu (referred from main.o). 具体表现为&#xff0c;不管我把自己写的一个my.c里的什么函数或者变量名&#xff0c;即使在main.c中声明、引用了&#…

PCL从理解到应用【04】Octree 原理分析 | 案例分析 | 代码实现

前言 Octree 作为一种高效的空间分割数据结构&#xff0c;具有重要的应用价值。 本文将深入分析 Octree 的原理&#xff0c;通过多个实际案例帮助读者全面理解其功能和应用&#xff0c;包括最近邻搜索、半径搜索、盒子搜索以及点云压缩&#xff08;体素化&#xff09;。 特性…

搞懂负载均衡,零基础也可以!

本文作者&#xff1a;程序员鱼皮 免费编程学习 - 编程导航网&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是鱼皮。 周末在家写代码&#xff0c;无意中跟朋友提了下 LB&#xff0c;还说 LB 好的呱呱叫。 朋友笑了笑&#xff0c;问我 LB 是谁&#xff1f; 我解释…

加密软件|让数据传输更安全

加密软件在当今数字化时代扮演着至关重要的角色&#xff0c;它们通过先进的加密算法和技术&#xff0c;确保数据在存储、传输和分享过程中的安全性&#xff0c;从而保护个人隐私和企业机密。一、加密软件的基本作用数据加密&#xff1a;加密软件通过应用复杂的加密算法&#xf…

Python转换PDF为PowerPoint演示文件

PDF文件以其跨平台兼容性和版面固定性成为了分享和存储文档资料的首选格式。然而&#xff0c;在需要进行生动、互动性强的演示时&#xff0c;PDF的静态特性便难以满足个性化演示需求。将PDF文件转换为PowerPoint演示文稿可以解决这一问题。PowerPoint不仅提供了丰富的动画和过渡…

网关设备BL122实现Modbus RTU/TCP转Profinet协议

Modbus与Profinet是两种广泛应用于工业自动化领域的通信协议&#xff1a;Modbus因其简单性和兼容性&#xff0c;在许多工业设备中得到广泛应用&#xff1b;而Profinet提供了高速、高精度的通信能力&#xff0c;适合于复杂控制系统和实时应用&#xff0c;但两者之间的差异导致了…

uniapp easycom组件冲突

提示信息 ​easycom组件冲突&#xff1a;[/components/uni-icons/uni-icons.vue,/uni_modules/uni-icons/components/uni-icons/uni-icons.vue]​ 问题描述 老项目&#xff0c;在uniapp插件商城导入了一个新的uniapp官方开发的组件》uni-data-picker 数据驱动的picker选择器 …

测试人必会 K8S 操作之 Dashboard

在云计算和微服务架构的时代&#xff0c;Kubernetes (K8S) 已成为管理容器化应用的标准。然而&#xff0c;对于许多新手来说&#xff0c;K8S 的操作和管理常常显得复杂而神秘。特别是&#xff0c;当你第一次接触 K8S Dashboard 时&#xff0c;你是否也感到有些无所适从&#xf…

【Python】一文详细向您介绍 scipy.cluster.vq.kmeans() 的原理、常见用法和使用场景举例等

【Python】一文详细向您介绍 scipy.cluster.vq.kmeans() 的原理、常见用法和使用场景举例等 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; …

python简单学习笔记

1. print 输出 print(2024, 年&#xff0c;我要想娘) # sep:设置打印多个内容的分隔符&#xff0c;默认值为空格 print(2024, 年&#xff0c;我要想娘, sep, end\n) # end:设置print执行结束后的操作&#xff0c;默认值为换行格式化输出 print(格式化字符串 % (变量1, 变量…

org.springframework.jdbc.BadSqlGrammarException异常

Bug 记录 概述 在执行定时任务更新电子书统计信息时&#xff0c;遇到了 org.springframework.jdbc.BadSqlGrammarException 异常&#xff0c;具体表现为 SQL 函数 count 被错误地解析为自定义函数 wiki.count&#xff0c;导致数据库更新操作失败。 详细描述 错误信息&#x…