python网络爬虫原理
阅读目录
- 一、爬虫是什么
- 二、爬虫的基本流程
- 三、http协议和https协议的区别
- 四、 request与Response之间的关系
- 五、 request请求 以及常用请求方式
- 六、Response响应
- 七、总结
一.爬虫是什么?
互联网是什么?互联网是由一个个站点和网络设备组成的,通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前;
爬虫指的是:通过程序代码模拟浏览器向网站发起请求,把站点(服务器)返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而通过解析代码分析并提取自己需要的数据;
(若将爬虫比喻为蜘蛛,互联网将是一张蜘蛛网)
二.爬虫的基本流程?
用户获取网络数据的方式:浏览器提交请求---->下载网页代码---->解析成页面;
爬虫获取网络数据的方式:模拟浏览器发送请求(获取网页代码)---->提取有用的数据----->存放于数据库或文件中;
1、发起请求
使用http库向目标站点发起请求,即发送一个Request(包含请求头、请求体等);
2、获取响应内容
如果服务器能正常响应,则会得到一个Response(包含:html,json,图片,视频等);
3、解析内容
解析html数据:正则表达式(re模块),第三方解析库(xpath,css,Beautifulsoup,pyquery等)(xapth最为方便);
解析json数据:json模块
解析二进制数据:以wb的方式写入文件
4、保存数据
数据库(MySQL,Mongdb等)
文件(Excel等)(利用pandas库将爬取的数据存储在Excel较为方便)
三.http与https协议的区别
网站的URL会分为两部分:通信协议和域名地址;
通信协议,简单来说就是浏览器和服务器之间沟通的语言。网站中的通信协议一般就是HTTP协议和HTTPS协议。
HTTP协议是一种使用明文数据传输的网络协议。存在安全隐患。
HTTPS协议可理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。
四.request与Response之间的关系
Request:即请求,用户将自己的信息通过浏览器发送给服务器。
Response:即响应,服务器接收请求,分析用户发来的请求信息,然后返回数据。
注:普通获取网络数据的方式,浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,提取其中的有用数据。
五.request请求 以及常用请求方式
1、请求方式:
Requests的Get和POST方法的请求参数分别是params和data;
Requests 是python的很实用的HTTP客户端库;
2、定位request请求中的参数URL(url全球统一资源定位符)
注:网页的加载过程是:加载一个网页,通常都是先加载document文档,
3、请求头
User-agent:请求头中如果没有user-agent客户端配置,服务端可能将你当做一个非法用户host;
cookies:cookie用来保存登录信息
4.常用的请求方式
(1)添加请求头:(请求头以字典的形式生成,然后法送请求中以参数的形式传递并作用的请求中)
代码如下:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/53.0.2785.89 Safari/537.36'}
requests.get("https:....",headers=headers)
(2) 使用代理IP:使用IP的使用方法和请求头一致,设置proxies参数即可,代码如下;
import requests
proxies = {"http":"http://10.10.1.10:3128""http":"http://10.10.1.10.1080"}
requests.get("https://....",proxies=proxies)
(3)证书验证:通常设置关闭验证即可。在请求设置参数verify=False时就能关闭证书的验证,默认情况下是True。需要设置证书文件,可在verify值为证书路径;
import requests
url = "https://..."
#关闭证书验证
r = requests.get(url,verify=False)
print(r.status_code)
#开启证书验证
r = requests.get(url,verify=True)
#设置证书所在路径
r = requests.get(url,verify='路径')
(4)超时设置:
requests.get("https://...",timeout=0.01)
requests.post("https://...",timeout=0.01)
(5)使用cookies:只需设置参数Cookies即可;请求头注意携带;
六.Respons响应
1、响应状态码
200:代表成功
301:代表跳转
404:文件不存在
403:无权限访问
502:服务器错误
注:通过F12快捷键检查Response响应元素(JSO数据,如网页html,图片,二进制数据等 )
七.总结
1、总结爬虫流程:
代码爬取--->Response解析--->数据存储
2、爬虫所需工具:
请求库:requests
解析库:正则,xpath,css,beautifulsoup,pyquery
存储库:文件,MySQL,Mongodb等
爬虫基础实例:
例:空气质量排名-xpath-存储于mysql数据库
#xpath方法
import requests
from lxml import html
etree = html.etree
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='admin',
db='mysql01', charset='utf8')
# 获取游标(指定获取的数据格式,这里设定返回dict格式)
cursor = conn.cursor()
url = 'http://www.tianqi.com/air/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36sudaref: graph.qq.com'
}
response = requests.get(url=url,headers=headers)
html = etree.HTML(response.text)
id_list = html.xpath('//div[@class="meta"]/ul/li/@id')[1:]
print(id_list)
# del(id_list[0]) #第0号元素无用,不是目标数据,将其删除
#建立一个新的列表存放最终数据
print("全国重点城市空气质量指数排行榜\n排名\t城市\t空气质量指数\t质量状况")
for i in range(len(id_list)):
data = []
j = id_list[i]
# print(j)
result = html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/text()'%j) #获取排名和空气质量指数
rank = data.append(result[0])
number_top = data.append(result[1])
city = data.append(html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/a/text()'%j)[0])#获取城市名
quality = data.append(html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/em/text()'%j)[0]) #获取质量状况
print("%s\t%s\t%s\t%s"%(data[0],data[1],data[2],data[3]))
# mysql 插入语句(将title和boby插入cnblogs表中)
sql = 'insert into air value (%s,%s,%s,%s)'
parm = (data[0],data[1],data[2],data[3])
# execute(sql,args)args一般是list或tuple格式,如果只有一个参数,可直接传入 execute方法中sql语句占位符是%s
cursor.execute(sql, parm)
# 提交数据 conn.commit()
conn.commit()
上一篇: Ubuntu开启允许root用户远程登录