欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python网络爬虫原理

程序员文章站 2022-03-04 08:42:26
...

阅读目录

一.爬虫是什么?

   互联网是什么?互联网是由一个个站点和网络设备组成的,通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前;

   爬虫指的是:通过程序代码模拟浏览器向网站发起请求,把站点(服务器)返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而通过解析代码分析并提取自己需要的数据;

(若将爬虫比喻为蜘蛛,互联网将是一张蜘蛛网)

二.爬虫的基本流程?

用户获取网络数据的方式:浏览器提交请求---->下载网页代码---->解析成页面;

爬虫获取网络数据的方式:模拟浏览器发送请求(获取网页代码)---->提取有用的数据----->存放于数据库或文件中;

 python网络爬虫原理

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()

 

相关标签: python网络爬虫