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、打开⽬标⽹页
java多线程执行一个任务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并赋值为⽬标⽹站'www.0011kytt'以及要搜索的电影名movie_name
# 注意引号,字符串必须⽤引号包围起来
movie_name = '霸王别姬'
url = 'www.0011kytt'
# 然后⽤()来获取⽹页
r = (url)
# 这⾥要根据⽹页的编码来设置解码,这个⽬标⽹站编码为'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"来就好了
易语言send# 注意,因为class是python关键字,所以这⾥要⽤class_,这是BeautifulSoup的规定
search_box = soup.find(class_='search_box')
# OK 打印出来看看得对不对
print(search_box)
复制这段代码到spider.py中,粘贴到上⼀段代码后⾯,然后跟上⾯⼀样点击运⾏,得到结果如图
不得了了,这个智障爬⾍已经学会到搜索框了,OK,这⼀步⼜⼤功告成
java基础知识总结超详细
3、提交搜索电影名并打开搜索结果页⾯
我们的⼩爬⾍长进不⼩,继续教他怎么把电影名字填进搜索框然后点击搜索
再回到浏览器F12界⾯,我们再来填电影名的位置以及搜索按钮的位置,如图
苏菲玛索也太好看了吧忍不住截出来给⼤家看看乌蝇哥乱⼊这⽹页做的什么⿁
说正事
我们已经到输⼊位置和搜索按钮位置分别在<input>和<button>中
《呐喊》名画另外,我们研究⼀下这个⽹站的搜索功能,先随便搜索⼀个霸王别姬吧,说姬不说吧⽂明你我他,如图
从图中看到,⽹站链接变了,搜索页⾯变为了php⽂件,记录下这个url
还不赶紧告诉你的智障爬⾍,作为⽗亲就得⼿把⼿教他
# ⽹站搜索页⾯的url为www.0011kytt/search/search.php
search_url = 'www.0011kytt/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)
# 同样需要解码
ding = 'utf-8'
# 获取⽹页源码并赋值给变量html
r_html =
# 打印看看对不对
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来存储搜索结果的详情页链接
爬虫软件 appmovie_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
# 直接 获取⽹页
r_m = (movie_url)
# 同样需要解码
ding = 'utf-8'
# 获取⽹页源码并赋值给变量html
m_html =
# 打印看看对不对
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_list
for 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
# 直接 获取⽹页
r_m = (movie_url)
# 同样需要解码
ding = 'utf-8'
# 获取⽹页源码并赋值给变量html
m_html =
# 打印看看对不对
# 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_list
for 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)
运⾏之后我们看到,spider.py路径中多了⼀个txt⽂件,⾥⾯保存了下载链接,如图
⾄此⼤功告成了!你的智障爬⾍终于幼⼉园毕业了!后⾯就要靠他⾃⼰悟了!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论