一、什么是爬虫?
网络爬虫,其实叫作网络数据采集更容易理解。
就是通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。
归纳为四大步:
1.根据url获取HTML数据
2.解析HTML,获取目标信息
3.存储数据
4.重复第一步
二、HTML
什么是HTML?
超文本标记语言(英语:HyperTextMarkupLanguage,简称:HTML)是一种用于创建网页的标记语言,里面嵌入了文本、图像等数据,可以被浏览器读取,并渲染成我们看到的网页样子。
所以我们才会从先爬取HTML,再 解析数据,因为数据藏在HTML里
比如这就是一个简单的html程序
<!DOCTYPE html>
<html>
<head>
<title>This is a title</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>
三、爬虫基本原理
在编写python爬虫程序时,只需要做以下两件事:
①发送GET请求(模拟计算机对服务器发起Request请求),获取HTML
②解析HTML,获取数据
这两件事,python都有相应的库帮你去做,你只需要知道如何去用它们就可以了。
四、爬虫三大库
1.Request库
作用是请求网站获取网页数据
import requests
res = requests.get('http://www.baidu.com')
print(res) # 返回200则请求网址成功,404或者400则失败
print(res.text)
显示的结果和F 12的一样
有时爬虫需要加入请求头来伪装成浏览器,以便更好地抓取数据。
在F 12里的network里headers中找到User-Agent进行复制
import requests
headers = {
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko))Chrome/87.0.4280.66 Safari/537.36'
}
res = requests.get('http://www.baidu.com')
print(res) # 返回200则请求网址成功,404或者400则失败
print(res.text)
Requsets 库不仅有get()方法,还有post()等方法,用来提交表单来爬取需要登陆才能获取数据的网络。
如果遇到抛出异常,修改后爬虫程序还需要再重新运行,效率很低。这时可以使用try来避免异常
try:
print(res.text)
except ConnectionError #出现except后面的错误后执行下面聚聚
print('拒绝连接')
2. BeautifulSoup库
通过BeautifulSoup库可以轻松解析Request库请求的页面,并把网页的源代码解析成Soup文档,以便过滤提取数据
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko))Chrome/87.0.4280.66 Safari/537.36'
}
res = requests.get('http://www.baidu.com')
soup = BeautifulSoup(res.text,'html.parser') # 对返回的结果进行解析
print (soup.prettify())
其实输出的内容和request的一样,但它按照标准缩进格式的结构输出,为后续数据过滤提取做好准备。
解析Soup文档可以使用find()、find_all()和selector()定位需要的元素。
1.find_all()
soup.find_all( ‘div’,“item” ) ## 查找div标签,class=“item”
soup.find_all( ‘div’,class=“item” )
2.find()
与上者类似,只是find_all()返回的是文档中符合条件的所有tag,是一个集合(class ’ bs4.element.ReaultSet ’ )
而find()是返回一个Tag(class ’ bs4.element.Tag ’ )
五、正则表达式
正则表达式是一个特殊的符号系列,用于检查一个字符串是否与某种模式匹配。
用