session 和cookie的区别 ---- 和数据的爬取流程-----------和简单实例

<1>session 和 cookie的主要区别:

session 是在服务器端缓存一段时间的必要的信息 用于登陆后的快速识别 安全性高于cookie 但是会占用服务器的资源 安全信息才会使用

cookie 是每往服务器发送请求时连同cookie 一起发送用于验证是否已登录以获取相应的浏览权限 而不必每次都登陆 cookie 一般都小于14k 数量小于20个

<2>数据爬取的一般流程(5步)

  1. 了解需求

  2. 确定爬取的网站

  3. 网站数据获取到本地

  4. 定位所需数据

  5. 存储

<3>简单爬取百度首页的数据

1.导入request
from urllib import request

2.确定爬取网站
url=’www.baidu.com’

3.响应的内容
response=request.urlopen(url)

4.获取响应内容的HTML 格式文件
html_type=response.read()

5.存储文件
with open(‘baidu.html’,’wb’) as a:
a.write(html_type)

<4>西刺代理首页的爬取(添加User-agent 进行简单的反反爬)

<1>从urllib 包中导入request
from urllib import request
<2>指定爬取的网站
url=’http://www.xicidaili.com
<3>添加名字
user_agent=’Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36’
<4>定义headers用于数据的分配
headers={‘User-Agent’:user_agent}
<5>创建用于存储响应内容的对象
req=request.Request(url,headers=headers)
<6>把响应内容添加到req的实例化对象之中
response=request.urlopen(req)
<7>以html 的形式读取出来类型是bytes格式
html_type=response.read()
<8>存储数据到html文件中
with open(‘xcdl.html’,’wb’) as f:
f.write(html_type)

<5>添加错误处理防止报错使爬取停止

<1>导入包
from urllib import request
from urllib.error import HTTPError,URLError
<2>指定爬取的网站制定路由
url=’http://www.xicidaili.com
<3>添加User-Agent名字
user_agent=’Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36’
<4>定义headers用于数据的分配
headers={‘User-Agent’:user_agent}
<5>创建用于存储响应内容的对象
req=request.Request(url,headers=headers)
try:
<7>把响应内容添加到req的实例化对象之中
response=request.urlopen(req,timeout=5)#timeout 是设置超时时间
以html 的形式读取出来
html_type=response.read()
存储数据
with open(‘xcdl3_text.html’, ‘wb’) as f:
f.write(html_type)
<8>存储数据到html文件中
# print(html_type)
错误的处理
except HTTPError as a:
print(a)
except URLError as a:
print(a)

<6>封装

* 封装一个函数使数据的爬取更加的便捷 *
<1>导包
from urllib import request, parse
from urllib.error import HTTPError, URLError
定义函数get 数据的请求方式为get
def get(url, headers=None):
return urlrequests(url, headers=headers)
定义函数get 数据的请求方式为post
def post(url, form, headers=None):
return urlrequests(url, form, headers=headers)
封装一整个函数用于爬取数据
def urlrequests(url, form=None, headers=None):
**<1>定义User-Agent
user_agent = ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36’
<2>判断form是否存在如果不存在就给于headers分配一个已有值
if headers==None:
headers = {
‘User-Agent’: user_agent
}
<3>给于html_bytes 一个初始的空值 且为二进制
html_bytes = b”

try:
<4>当form存在 为POST方式提交的时间
if form:
<5>首先把form的字典数据格式转化为字符串格式
form_str = parse.urlencode(form)
<6>把字符串格式转化为二进制格式
form_bytes = form_str.encode(‘utf-8’)
<7>创建一个用于存储响应数据的对象
req = request.Request(url, data=form_bytes, headers=headers)
当form不存在 为GET方式提交的时间
else:
<7>创建一个用于存储响应数据的对象
req = request.Request(url, headers=headers)
<8>把响应的内容存储到req对象中
response = request.urlopen(req)
<9>把对象中的内容读取出来
html_bytes = response.read()
<10>错误处理
except HTTPError as e:
print(e)
except URLError as e:
print(e)
<11>把读取出来的内容作为返回值
return html_bytes

主程序入口

if name == ‘main‘:
定义要爬取得数据的路由
url = ‘http://www.baidu.com
用变量接受返回值
html_byte = get(url)
打印出爬取出来的内容
print(html_byte.decode(‘utf-8’))
把爬取的html存储到xxxx.html文件中
with open(‘xxxx,.html’,’wb’) as ff:
ff.write(html_byte)

<7>西祠代理和Python官网首页的网站爬取问题 ———–解决问题为:错误为(503)

添加名字 User-Agient

    user_agent='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'  

猜你喜欢

转载自blog.csdn.net/chengjintao1121/article/details/81639638