Python爬虫:让“蜘蛛”帮我们工作

390 篇文章 2 订阅
39 篇文章 3 订阅

互联网是一个巨大的资源库,只要方法适当,就可以从中找到我们所需的数据。对于少量的数据,可以人工去找。但是对于大量的数据,如果在获取数据之后还要进行分析,则靠人工无法完成任务,这时就需要通过计算机程序帮助我们完成任务,这种程序就叫作网络爬虫(又叫作网页蜘蛛、网络机器人)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

“虫子”的第 1 阶段工作——爬取数据

爬取数据一般指从指定的网址爬取网页中的HTML代码,爬取数据的核心是网络通信,可以使用Python官方提供的urllib.request模块实现,代码如下:

# coding=utf-8
# 代码文件:code/chapter6/6.1.1.py
# 爬取数据
import urllib.request
# 爬取数据的网址
url = 'http://p.weather.com.cn/'
def getHtmlString():
 """ 网络请求返回HTML字符串 """
 
 
 req = urllib.request.Request(url)
with urllib.request.urlopen(req) as response:
 data = response.read()
 htmlstr = data.decode(encoding='utf-8', errors='ignore')
return htmlstr
if __name__ == '__main__':
 html = getHtmlString()
 print(html)

“虫子”的第 2 阶段工作——解析数据

在这里插入图片描述
pip install beautifulsoup4

在Windows平台上通过命令提示符安装BeautifulSoup库的过程如下图所示。其他平台的安装过程类似,这里不再赘述。
在这里插入图片描述
解析HTML数据是通过BeautifulSoup对象实现的,BeautifulSoup对象的常用函数如下。

  • find_all(tagname):根据标签名返回符合条件的所有元素。
  • select(selector):通过CSS中的选择器查找符合条件的所有元素。
  • find(tagname):根据标签名返回符合条件的第一个元素。
  • get(key, default=None):获取标签属性的值,key表示标签属性名。
  • BeautifulSoup常用的属性如下。
  • title:获取当前HTML页面title属性的值。
  • text:返回标签中的文本内容。

从HTML代码中解析出图片网址的代码如下:

# coding=utf-8
# 代码文件:code/chapter6/6.1.2.py
# 解析数据
import urllib.request
from bs4 import BeautifulSoup
# 爬取数据的网址
url = 'http://p.weather.com.cn/'
def getHtmlString():
 """ 网络请求返回HTML字符串 """
 req = urllib.request.Request(url)
 with urllib.request.urlopen(req) as response:
 data = response.read()
 htmlstr = data.decode(encoding='utf-8', errors='ignore')
 return htmlstr
def find_imageurls(htmlstr):
 """从HTML代码中查找匹配的字符串"""
 sp = BeautifulSoup(htmlstr, 'html.parser')
 # 返回所有的img标签对象
 imgtaglist = sp.find_all('img')
 # 从img标签对象列表中返回对应的src列表
 srclist = list(map(lambda u: u.get('src'), imgtaglist))
 # 过滤掉非.png和.jpg结尾文件的src字符串
 filtered_srclist = filter(lambda u: u.lower().endswith('.png')
 or u.lower().endswith('.jpg'), srclist)
 return filtered_srclist
if __name__ == '__main__':
 html = getHtmlString()
 # 返回图片列表
 url_list = find_imageurls(html)
 # 遍历图片列表
 for img_url in url_list:
 # 打印图片url列表
 print(img_url)

在这里插入图片描述

“虫子”的第 3 阶段工作——下载图片

在这里插入图片描述
“虫子”的第3个阶段工作是存储数据。但就本例而言主要是根据图片的网址下载图片。
在这里插入图片描述

  1. html.parser:用Python编写的解析器,速度比较快,支持Python 2.7.3和Python3.2.2以上版本。
  2. lxml:用C语言编写的解析器,速度很快,依赖于C库,在CPython环境下可以使用它。
  3. lxml-xml:用C语言编写的XML解析器,速度很快,依赖于C库。
  4. html5lib:HTML5解析器,通过HTML5算法解析文件,容错性好,但速度慢。

下载图片的代码如下:

# coding=utf-8
# 代码文件:code/chapter6/6.1.3.py
# 爬取数据
import os
import urllib.request
from bs4 import BeautifulSoup
# 爬取数据的网址
url = 'http://p.weather.com.cn/'
......
if __name__ == '__main__':
 html = getHtmlString()
 # 返回图片列表
 url_list = find_imageurls(html)
 # 遍历图片列表
 for img_url in url_list:
 # 根据图片地址下载
 req = urllib.request.Request(img_url)
 with urllib.request.urlopen(req) as response:
 data = response.read()
 # 获取图片文件名
 # 例如:https://i.i8tq.com/weather2020/search/rbAd.png
 # 截取的文件名是“rbAd.png”
 # 找到最后一个“/”字符的位置
 pos = img_url.rfind('/')
 # 截取文件名
 filename = img_url[pos + 1:]
 # 获取图片路径
 filepath = 'download/' + filename
 # 判断在当前文件夹下是否存在download子文件夹,如果不存在,则创建
 if not os.path.exists('download'):
 # 创建download子文件夹
 os.mkdir('download')
 # 保存图片
 with open(filepath, 'wb') as f:
 f.write(data)
 print('下载图片:{}。'.format(filename))
 print('工作完成。')

在这里插入图片描述

最后

作为一个IT的过来人,我自己整理了一些python学习资料,希望对你们有帮助。

有问题可以扫描下面二维码——>添加csdn官方认证二维码探讨

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

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

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

二、学习软件

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

三、入门学习视频

四、实战案例

五、面试资料



最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值