爬虫基本原理
爬虫是 模拟用户在浏览器或者App应用上的操作,把操作的过程、实现自动化的程序
当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入https://www.baidu.com
简单来说这段过程发生了以下四个步骤:
- 查找域名对应的IP地址。
浏览器首先访问的是DNS(Domain Name System,域名系统),dns的主要工作就是把域名转换成相应的IP地址 - 向IP对应的服务器发送请求。
- 服务器响应请求,发回网页内容。
- 浏览器显示网页内容
网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据, 而不需要一步步人工去操纵浏览器获取。
(1).浏览器是如何发送和接收这个数据呢?
HTTP协议(HyperText Transfer Protocol,超文本传输协议)目的是为了提供一种发布和接收HTML(HyperText Markup Language)页面的方法。
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
(2).爬虫基本思路
(1).通过URL或者文件获取网页,
(2).分析要爬取的目标内容所在的位置
(3).用元素选择器(re、BeautifulSoup、Xpath等)快速提取(Raw)目标内容
(4).处理提取出来的目标内容 (通常整理合成一个 Json)
(5).存储处理好的目标内容(比如放到 MongoDB、MySQL 之类的数据库,或者写进文件里.)
1.静态本地网页与json文件爬取演示
(1).html网页抓取
import urllib.request as re
from bs4 import BeautifulSoup
# 1.使用urllib的request模块,打开一个带有html页面的链接,此时获取的只是一个链接对象
response = re.urlopen("file:///D:/Project/Python/jyputerTest/Spider/Source/demo01.html")
# 2.从连接对象中将网页源代码字符串获取到,此时是没有经过格式化的
html = response.read()
# 3.通过 BeautifulSoup 对网页源代码字符串进行解析
soup = BeautifulSoup(html)
# 4.我们就可以从BeautifulSoup中直接使用标签名作为参数 去直接获取对应 标签 中的数据
soup.find('tr')
soup.find_all('tr')
(2).json数据读取
import urllib.request as re
# 此时我们解析json使用的模版是json
import json
# 1.同样此时获取我们文件的连接
response = re.urlopen("file:///D:/Project/Python/jyputerTest/Spider/Source/demo02.json")
# 2.将连接中的数据读取为源字符串
jsonString = response.read()
# 3.加载数据为json,同时对读取到的json字符串做一个解码
jsonObject = json.loads(jsonString.decode())
# 4.对json中的数据进行值的获取(分不同的层级)
jsonObject['employees'] # 根路径
jsonObject['employees'][0] # 获取列表中的第一个元素
jsonObject['employees'][0]['firstName'] # 获取字典中指定的key对应的值(value)
2.爬虫实战:7日天气预报 爬取
本次实战主要是使用 request库 和 BeautifulSoup 库进行数据的爬取
(1).实战原理
1),Requests 简介
request库是一个非常好用的请求发送包,它可以自动封装底层python 的网络请求。
其中我们本次课程中是使用的:Requests.get()方法
Requests库的get()方法主要用于获取HTML网页,相当于HTTP的GET。其返回对象response的常用属性如下表所示,我们可通过这些属性获取要访问域名的基本信息。
2),BeautifulSoup 简介
BeautifulSoup库是用Python语言编写一个HTML/XML的解释器。它可以很好地处理不规范的标记并生成剖析树,其本身提供了简单又常用的导航、搜索以及修改剖析树的操作,利用它可以大大缩减编程时间。
简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。
3),网页信息查找与提取
我们使用Chrome浏览器,对于要爬取的网页,可以按F12进入调试模式,也可以选择相应信息右键"检查",亦可进入调试模式,而且直接到达该信息HTML位置,更为方便。
(2).实战代码
# 导入requests模块和bs4模块
import requests
from bs4 import BeautifulSoup
# 加入请求头,防止网站监测出来我们是爬虫,所以都必须要引入请求;对于有需要 登录 的页面需要加上cookices,那么直接在header字典中将 " 'Cookie': '你的cookie' "添加进去
header={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safa