Python之网络数据采集入门常用模块初识

网络数据采集是指通过程序在互联网上自动采集数据,采集数据所用的程序也被称为网络爬虫(Web crawler)。本文主要是记录一些网上数据采集常用的模块及其简单的相关操作。

⚪urllib模块及其request子模块

urllib是网络数据采集中不可缺少的模块,包含在Python标准库中。在Python3.x中,urllib模块有urllib.request、urllib.parse、urllib.error、urllib.robotparser四个子模块。
官网说明文档参考→https://docs.python.org/zh-cn/3/library/urllib.html
在这里插入图片描述
其中,urllib.request是最主要的模块,用于打开和访问URL上的数据,包含了urlopen()、urlretrieve等函数及Request等类。

网络数据采集首先是要通过URL向网络服务器发出请求,然后对返回的数据进行解析。

urllib.request模块中的urlopen函数用于打开HTTP、HTTPS、FTP协议的URL,接收返回的URL资源,语法如下:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
参数url可以是一个字符串(URL地址)或一个 Request 对象;参数data是在以post方式提交URL时使用;timeout是超时间设置;参数中以ca开头的都和身份验证有关,不太常用。
函数返回的是Response对象。Response对象是一个类文件对象,可以像文件对象一样进行操作,如read(),此外,Response对象还有其他几个方法,示例如下

'''request 获取网站基本信息'''
with request.urlopen('http://www.sohu.com') as f:  # 打开网络协议的URL,返回的是Response对象
    print(f.geturl(), "\n")  # 返回response的URL信息,常用于URL重定向
    print(f.info, "\n")  # 返回response的基本信息
    print(f.getcode(), "\n")  # 返回response的状态代码,(200表示成功返回网页,404表示请求的网页不存在,503表示服务器暂时不能用)
    data = f.read()  # 对response类文件对象进行读取
    print(data.decode('utf-8'))  # 对读取的信息解码输出

输出如下:
在这里插入图片描述

互联网上的数据文件可以通过URL向网络服务器发出请求,如果请求成功就可以下载数据。urllib.request模块中retrieve函数用于下载指定URL地址的文件,语法如下:
retrieve(url, filename-None, reporthook=None)
url是指定的URL地址;filename是保存的路径及文件名,若缺省则随机生成文件名并保存到temporary目录下;reporthook用于调用一个显示下载进度的函数。
示例如下:

'''网络数据文件下载,retrieve函数'''
# 下载网页的html文件
url = "http://baidu.com"
request.urlretrieve(url, "D:/tmp/baidu.html")
# 下载图片、视频等文件只要有找到对应网址,保存路径的文件后缀名写成对应的就行
url = "https://gimg3.baidu.com/***/*****.jpeg"
request.urlretrieve(url, "D:/tmp/baidup.jpg")


⚪requests模块

requests是一个用Python编写的第三方模块,擅长处理复杂的HTTP请求、cookie、header(响应头和请求头)等内容。
说明文档参考→(英文)https://docs.python-requests.org/en/master/
(中文)https://docs.python-requests.org/zh_CN/latest/user/quickstart.html
在这里插入图片描述
👆说明文档很简洁易懂,这里就简单放个示例:

'''requests模块获取网站信息'''
import requests

user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' \
             'Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/30'  # 请求头的用户代理
headers = {'User-Agent': user_agent}  # 设置请求头参数
response = requests.get('https://www.baidu.com/', headers=headers)
print(response.status_code)  # 返回状态码
print(response.headers)  # 响应头,返回一个字典
print(response.encoding)  # 根据响应头信息获得的响应内容的编码类型
print(response.text)  # 字符串形式的响应内容
print(response.content)  # 二进制形式的响应内容
print(response.cookies)  # 获取所有cookie信息


⚪BeautifulSoup包

准备
BeautifulSoup是网页数据解析中比较常用的一个Python包,它利用已有的HTML/XML的解析器(HTML parser、lxml、html5lib等)对HTML或XML文档进行解析。具体可参考其说明文档——①https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
可以在命令行中利用pip install bs4来下载安装最新版的BeautifulSoup包。
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml,同样可以通过pip install lxml来下载安装这个解释器。
在这里插入图片描述
使用
将一段HTML代码的字符串或文档传入BeautifulSoup 的构造方法,就能得到一个 BeautifulSoup 的对象,然后利用其相关方法进行相关操作。

html_doc = request.urlopen('http://www.baidu.com')  # 获取一个html文档的对象
soup = BeautifulSoup(html_doc, "html.parser")  # 利用Python标准库中的解释器html.parser解析html_doc对象
print(soup.prettify())  # 按照标准格式输出
print(soup.html.head.title)  # 返回title标签,输出为:<title>百度一下,你就知道</title>
print(soup.html.body.div)  # 返回div标签

BeautifulSoup 对象的 find_all()【find()】 方法,分别用于查找当前节点下所有符合条件的元素。其语法为:find_all( name , attrs , recursive , string , **kwargs )

soup.find_all("a")  # 返回标签名称为a的元素组成的列表
soup.find_all("p", {"class": ["text-color", "lh"]})  # 返回class值为"text-color"和"lh"的P标签内容

利用find_all()函数返回的tag对象get_text方法会返回标签内容的字符串,标签对象的attrs属性返回所有属性的字典,通过字典的键可以返回对应的属性值。
(获取百度网站上的超链接地址):

links = soup.find_all("a")
for link in links:  # 通过循环一条条输出标签内容对应的属性值
    print(link.get_text())
    print(link.attrs["href"])

输出结果如下:
在这里插入图片描述


⚪you-get包

you-get之功用:下载流行网站上的图片、音频、视频,例如YouTube,优酷,bilibili,以及更多。

cmd界面使用you-get下载视频等资源,可参考此两篇博文①https://blog.csdn.net/qq_45176548/article/details/113379829
https://www.cnblogs.com/mq0036/p/14917172.html
在这里插入图片描述
输入命令(-h)获取you-get的帮助使用手册👆:
you-get -h
输入命令直接下载视频:you-get https://www.bilibili.com/video/…(视频保存的网址)
输入命令(-i)查看视频详细信息:you-get -i https://www.bilibili.com/video/…(视频保存的网址)
输入命令(-o)将视频下载到指定路径(注:-O设置下载文件的名称):
you-get -o D:/tmp https://www.bilibili.com/video/…(视频保存的网址)

也可以写成python代码来执行:

import sys
import you_get

cookies = "cookies.sqlite"  # 下载会员视频时需要获取cookie
path = "D:/tmp/video"  # 下载后保存路径
url = "https://www.bilibili.com/..."  # 下载视频的网址
sys.argv = ["you-get", "--playlist", "-o", path, url]  # 将列表传入命令行执行(加上"--playlist"可一次下载多个视频)
# 这里,sys.argv是一个列表对象,其中可包含被传递给Python脚本的命令行参数。
you_get.main()



完事😀!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值