python爬虫实践(一)
最近在学习爬虫,学完后想实践一下,所以现在准备爬取校花网的一部分图片
第一步,导入需要的库
from urllib import request #用于处理request请求和获得响应 from urllib import error #异常处理 from lxml import etree #用于解析html
第二步,进行简单的身份伪装
def setting_User_Agent(url):
'''
有的网站会限制爬虫访问,所以可以通过
设置User-Agent来伪装成一个浏览器
'''
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3'
return request.Request(url, headers=headers)
第三步,观察我们想要访问的网站,并得到前十个页面的url
这是第一页的url:http://www.xiaohuar.com/list-1-0.html

这是第二页的url:http://www.xiaohuar.com/list-1-1.html

这是第四个页面的url:http://www.xiaohuar.com/list-1-3.html

所以我们可以通过一个函数来获得前十页的url
def getPageUrl():
'''
获得前十页的url
'''
url = "http://www.xiaohuar.com/list-1-"
pagrUrlList = []
for i in range(10):
pageUrl = url + str(i) + ".html"
pagrUrlList.append(pageUrl)
return pagrUrlList
第四步、假如我们已经知道了一张图片的名称和路径,那我们可以编写代码来实现自动根据路径下载图片,代码如下
def getIMg(name,imgUrl):
# 文件的路径和文件名称
name = "D:/xiaohua/" + name + ".jpg"
#发送请求并获得响应
try:
rsp = request.urlopen(imgUrl)
#把文件写进指定路径
with open(name,"wb") as f:
f.write(rsp.read())
except:
print("发生了一个错误")
第五步、查看网页布局
当进入网页后,按F12或者Fn + F12,会看到如下界面

当你鼠标放在右边的一个div上时,左边页面颜色会发生变化,打开你想要查看的div,一直往下找,直到出现下图

第六步:
1、我们现在知道了,图片信息就在<img>标签下,alt的属性值就是名字,src的属性值就是图片的地址,所以接下来编写代码获取名字和图片地址
2、获得的名字和图片地址传入getImg()函数,代码如下
def getImgUrl(url):
# 1、进行User-Agent的伪装
#url = setting_User_Agent(url)
#2、发起请求
try:
rsp = request.urlopen(url)
except:
print("发生错误")
# 3、返回的是一个Rs类型的数据,需要转化为bytes类型
html = rsp.read()
# 4、把bytes类型的数据放入lxml的etree中,方便用xpath解析
tree = etree.HTML(html)
# 5、用xpath解析html
aList = tree.xpath('//div[@class = "img"]/a')
'''
aList = tree.xpath('//div[@class = "img"]/a')
此代码的意思是:首先找到一个有class属性,并且属性值为img
的div标签,再获得该标签下的a标签
'''
# 6 、获得a标签下的img标签的alt属性和src属性,同样用xpath
for a in aList:
name = str(a.xpath('./img/@alt'))
imgUrl = str(a.xpath('./img/@src'))
'''
此时获得的name和imgUrl并不是标准的格式,而是
['*****************']这样的,所以需要用字符串截取
'''
name = name[2:-2]
imgUrl = imgUrl[2:-2]
'''
该网站的图片标准链接是以http开头的,而获取的imgUrl有的缺失了
一部分,所以加一个判断,如果没有,就加上
'''
t = imgUrl[:4]
if t == "http":
imgUrl = imgUrl
else:
imgUrl = "http://www.xiaohuar.com" + imgUrl
# 通过nema 和 imgUrl下载图片
getIMg(name, imgUrl)
return None
现在,该写的差不多已经写完了,把代码整合一下:
if __name__ == '__main__':
pageUrls = getPageUrl()
for pageUrl in pageUrls:
getImg(pageUrl)
代码执行前

执行后

整个爬取过程90秒,爬取了几百张图片,比下载快多了
总结:
我的代码能力和逻辑思维还不够,代码不够简洁,写文件那块做的不好,非常耗费资源,
可改进的地方:
1、相同功能的代码可以提取出来单独写一个函数
2、异常处理没写好,可以处理的更加完善
3、频繁的打开和关闭文件很耗资源,可以在程序开始时打开文件,程序结束时关闭文件
完整的代码如下:
from urllib import request
#用于处理request请求和获得响应
from urllib import error
#异常处理
from lxml import etree
#用于解析html
def setting_User_Agent(url):
'''
有的网站会限制爬虫访问,所以可以通过
设置User-Agent来伪装成一个浏览器
'''
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3'
return request.Request(url, headers=headers)
def getPageUrl():
'''
获得前十页的url
'''
url = "http://www.xiaohuar.com/list-1-"
pagrUrlList = []
for i in range(10):
pageUrl = url + str(i) + ".html"
pagrUrlList.append(pageUrl)
return pagrUrlList
def getIMg(name,imgUrl):# 根据名字和图片链接下载图片
# 文件的路径和文件名称
name = "D:/xiaohua/" + name + ".jpg"
#发送请求并获得响应
try:
rsp = request.urlopen(imgUrl)
#把文件写进指定路径
with open(name,"wb") as f:
f.write(rsp.read())
except:
print("发生了一个错误")
return None
def getImg(url):
# 1、进行User-Agent的伪装
url = setting_User_Agent(url)
#2、发起请求
try:
rsp = request.urlopen(url)
except:
print("发生错误")
# 3、返回的是一个Response类型的数据,需要转化为bytes类型
html = rsp.read()
# 4、把bytes类型的数据放入lxml的etree中,方便用xpath解析
tree = etree.HTML(html)
# 5、用xpath解析html
aList = tree.xpath('//div[@class = "img"]/a')
'''
aList = tree.xpath('//div[@class = "img"]/a')
此代码的意思是:首先找到一个有class属性,并且属性值为img
的div标签,再获得该标签下的a标签
'''
# 6 、获得a标签下的img标签的alt属性和src属性,同样用xpath
for a in aList:
name = str(a.xpath('./img/@alt'))
imgUrl = str(a.xpath('./img/@src'))
'''
此时获得的name和imgUrl并不是标准的格式,而是
['*****************']这样的,所以需要用字符串截取
'''
name = name[2:-2]
imgUrl = imgUrl[2:-2]
'''
该网站的图片标准链接是以http开头的,而获取的imgUrl有的缺失了
一部分,所以加一个判断,如果没有,就加上
'''
t = imgUrl[:4]
if t == "http":
imgUrl = imgUrl
else:
imgUrl = "http://www.xiaohuar.com" + imgUrl
# 通过nema 和 imgUrl下载图片
getIMg(name, imgUrl)
return None
if __name__ == '__main__':
pageUrls = getPageUrl()
for pageUrl in pageUrls:
getImg(pageUrl)
python爬虫实践(一)的更多相关文章
- python爬虫实践教学
i春秋作家:Mochazz 一.前言 这篇文章之前是给新人培训时用的,大家觉的挺好理解的,所以就分享出来,与大家一起学习.如果你学过一些python,想用它做些什么又没有方向,不妨试试完成下面几个案例 ...
- python爬虫实践
模拟登陆与文件下载 爬取http://moodle.tipdm.com上面的视频并下载 模拟登陆 由于泰迪杯网站问题,测试之后发现无法用正常的账号密码登陆,这里会使用访客账号登陆. 我们先打开泰迪杯的 ...
- Python爬虫实践 -- 记录我的第二只爬虫
1.爬虫基本原理 我们爬取中国电影最受欢迎的影片<红海行动>的相关信息.其实,爬虫获取网页信息和人工获取信息,原理基本是一致的. 人工操作步骤: 1. 获取电影信息的页面 2. 定位(找到 ...
- python爬虫实践(二)——爬取张艺谋导演的电影《影》的豆瓣影评并进行简单分析
学了爬虫之后,都只是爬取一些简单的小页面,觉得没意思,所以我现在准备爬取一下豆瓣上张艺谋导演的“影”的短评,存入数据库,并进行简单的分析和数据可视化,因为用到的只是比较多,所以写一篇博客当做笔记. 第 ...
- Python爬虫实践 -- 记录我的第一只爬虫
一.环境配置 1. 下载安装 python3 .(或者安装 Anaconda) 2. 安装requests和lxml 进入到 pip 目录,CMD --> C:\Python\Scripts,输 ...
- 《转载》python爬虫实践之模拟登录
有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录. 浏览器访问服务器的过程 在用户访问网页时,不论是通过URL输入域名或IP ...
- python爬虫实践--求职Top10城市
前言 从智联招聘爬取相关信息后,我们关心的是如何对内容进行分析,获取用用的信息.本次以上篇文章“5分钟掌握智联招聘网站爬取并保存到MongoDB数据库”中爬取的数据为基础,分析关键词为“python” ...
- Python爬虫实践~BeautifulSoup+urllib+Flask实现静态网页的爬取
爬取的网站类型: 论坛类网站类型 涉及主要的第三方模块: BeautifulSoup:解析.遍历页面 urllib:处理URL请求 Flask:简易的WEB框架 介绍: 本次主要使用urllib获取网 ...
- python爬虫实践——爬取“梨视频”
一.爬虫的基本过程: 1.发送请求(请求库:request,selenium) 2.获取响应数据()服务器返回 3.解析并提取数据(解析库:re,BeautifulSoup,Xpath) 4.保存数据 ...
随机推荐
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目链接 题意:给你一个有根树,假设有k个叶子节点,你可以给每个叶子节点编个号,要求编号不重复且在1-k以内.然后根据节点的max,minmax,minmax,min信息更新节点的值,要求根节点的值最 ...
- selenium中的下拉框处理模块Select
在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块). ...
- 《模式分类(原书第二版)》pdf格式下载电子书免费下载
<模式分类(原书第二版)>pdf格式下载电子书免费下载: https://u253469.ctfile.com/fs/253469-302448505 内容简介 <模式分类>( ...
- tomcat设置为开机自启动
第一步:设置环境变量(在java环境变量配置完成的情况下) 计算机右键——>属性——>高级系统设置——>环境变量——>在用户变量中心新建CATALINA_HOME变量 编辑pa ...
- static 关键字 静态成员变量及静态成员函数
static类成员 类成员类似于C语言的全局变量,但是与全局变量又有所不同,例如,全局变量是可以被任何的用户代码所修改,而且全局变量破坏了对象的封装性. 使用类的 static 成员的优点 使用 st ...
- 只要三步,使用html5+js实现像素风头像生成器
只要三步,使用html5+js实现像素风头像生成器 html5的画布给我们带来了很大的空间,其实像素风格头像生成器只是用到了画方块的方法.画一个像素头像,只要三步,1.解决像素点,2.解决像素点之间的 ...
- L2-011 玩转二叉树 (25 分) (树)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784 题目: 给定一棵二叉树的中序遍历和前序 ...
- QT学习之如何在QToolBar中添加带图标的QToolButton并设置图标大小
在网上查到了三种方法,找到一种比较好理解的. 使用QIcon类: QToolButton *toolBtn1 = new QToolButton(this); //创建QToolButton tool ...
- ubuntu系统的teamviewer的安装及使用
参考链接: 安装: https://blog.csdn.net/weixin_34613450/article/details/80541799 使用: https://jingyan.baidu.c ...
- onscroll 元素滚动事件
阻止事件冒泡 event.stopPropagation(); children():查找合集里面的第一级子元素.(仅儿子辈,这里可以理解为就是父亲-儿子的关) children只查找第一级的子节点 ...