前言
前段时间在公众号发布了一篇用Python网络爬虫来获取百度贴吧某帖子内所有图片的文章。写的确实不好。很多地方连我自己都搞不明白,这篇文章笔者尽量把它写好,写明白。还望各位大佬海涵。
这个系列是干什么的
这个系列主要是针对本校教务网进行一个网络爬虫,爬取的内容就是学生的成绩,如果要从爬虫基础开始写估计篇幅有点大,于是笔者打算做成一个系列进行连载,初步估计会有三、四篇,具体情况再说。
目录
1, 网络爬虫基础知识
2, 模拟登录
3, 获取成绩
学习网络爬虫必备的知识
HTML 帮助你了解网页的结构
TCP/IP协议和HTTP协议 帮助你了解网络请求和网络传输的基本原理
Python
网络爬虫基础知识
什么是网络爬虫?
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
以上是百度百科对网络爬虫的解释。
按照我的理解其实就是:从网页上获取我们所需要的数据。
需要网络爬虫来干什么?
这就是本系列的重点了,学习一门新的知识总要拿它去做点什么。一开始我就说过,本系列的目的是获取自己的成绩,然后保存下来。这个需求很简单,只要拿到成绩数据就可以了。
网络爬虫的步骤是什么?
1, 获取 HTML 数据
2, 解析数据
3, 保存数据
编写第一个网络爬虫
下载网页
要想爬取网页,首先得要把网页下载下来。
from urllib.request import urlopen
def download(url):
html = urlopen(url=url)
return html.read()
url = "http://pythonscraping.com/pages/page1.html"
print(download(url))
这段代码使用 Python 的 urllib 模块下载 URL。
当传入 URL 参数时,该函数会下载网页并返回其 HTML。
BeautifulSoup 简介
BeautifulSoup库的功能是用来解析我们下载好的 HTML。它通过定位 HTML 标签来格式化和组织复杂的网络信息。
安装 BeautifulSoup
这里网上有很多教程,就不详细说明,直接在 cmd 敲入下面这行命令就可以安装了。
pip install bs4
安装成功后测试一下。
在 Python 终端里导入
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import bs4
>>>
没有报错说明安装成功。
运行 BeautifulSoup
修改上个例子的代码
完整代码加群:683380553 获取!
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = "http://pythonscraping.com/pages/page1.html"
html = urlopen(url=url)
bsObj = BeautifulSoup(html.read(), "lxml")
print(bsObj.h1)
输出的结果是:
<h1>An Interesting Title</h1>
导入 urlopen,然后调用html.read() 获取网页的 HTML 内容。这样就可以把 HTML 内容传到 BeautifulSoup 对象。然后对 BeautifulSoup 对象进行操作。bsObj.h1 是从对象里提取 h1 标签。
这样,一个简单的网络爬虫就写好了。
关于 BeautifulSoup 其他的用法会在之后的文章里提到,大家也可以自行上网学习。
requests 简介
requests 是 python 实现的简单易用的 HTTP 库,使用起来比 urllib 简洁很多。
安装 requests
跟安装 bs4 一样。
pip install requests
基本用法
requests.get() 用于请求目标网站,类型是一个HTTPresponse类型。
import requests
from bs4 import BeautifulSoup
url = "http://pythonscraping.com/pages/page1.html"
html = requests.get(url=url)
bsObj = BeautifulSoup(html.text, "lxml")
print(bsObj.h1)
这里 html.text是以文本的形式打印网页源码。
输出结果是:
<h1>An Interesting Title</h1>
比较一下 urllib 是不是简洁很多?后续的文章当中都会使用 requests 库。大家可以去官网学习一下这个库的用法。
总结
首先笔者介绍了什么是网络爬虫,以及自己动手编写一个简单网络爬虫程序。
安装了两个网络爬虫非常棒的第三方库,简单的说明了这两个第三方库的用法。
这篇文章没有干货,有些地方写得可能生涩难懂,请大家见谅,有什么问题可以在后台留言,我都会一一回复,谢谢大家。
网友评论