目录
一、首先实现通过Requests模块爬取百度主页信息
代码流程:
源码:
打开baidu.html查看爬取结果
二、基于百度针对指定不同的关键字将其对应的页面进行爬取
源码第一版:
第一版测试:
源码第二版:
第二版测试:
Requests是爬虫中基于网络请求的模块,其作用是模拟浏览器发起请求。
一、首先实现通过Requests模块爬取百度主页信息
代码流程:
- 1.指定URL
- 2.发起请求
- 3.获取响应的数据(爬取到的页面源码数据)
- 4.持久化储存数据
源码:
# -*- codeing = utf-8 -*-
# @Time : 2021-10-20 11:08
# @Author : 韩大本事丶
# @File : learning.py
# @Software: PyCharm
import requests #引入模块
#1.指定url
url='https://www.baidu.com/'
#2.发起请求get方法的返回值为响应对象
response=requests.get(url=url)
#修改响应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding='utf-8'
#3.获取响应数据,text:返回的是字符串形式的响应数据
data=response.text
#4.持久化储存数据
with open('./baidu.html','w',encoding='utf-8') as file:
file.write(data)
print('爬取成功!')
打开baidu.html查看爬取结果
- 1.指定URL
- 2.发起请求
- 3.获取响应的数据(爬取到的页面源码数据)
- 4.持久化储存数据
源码:
# -*- codeing = utf-8 -*-
# @Time : 2021-10-20 11:08
# @Author : 韩大本事丶
# @File : learning.py
# @Software: PyCharm
import requests #引入模块
#1.指定url
url='https://www.baidu.com/'
#2.发起请求get方法的返回值为响应对象
response=requests.get(url=url)
#修改响应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding='utf-8'
#3.获取响应数据,text:返回的是字符串形式的响应数据
data=response.text
#4.持久化储存数据
with open('./baidu.html','w',encoding='utf-8') as file:
file.write(data)
print('爬取成功!')
打开baidu.html查看爬取结果
二、基于百度针对指定不同的关键字将其对应的页面进行爬取
参数动态化:
如果请求的url携带参数,且我们想要将携带的参数进行动态化操作那么我们必须:
1.将携带的动态参数以键值对的形势封装到一个字典中
2.将该字典作用到get方法的params参数中即可
3.需要将原始携带参数的url中将携带的参数删除
源码第一版:
import requests #引入模块
keyword=input('请输入关键字:')
#携带了请求参数的url,如果想要爬取不同关键字对应的页面,我们需要将url携带的参数进行动态化
#实现参数动态化:
#params参数(字典):保存请求时url携带的参数
params={
'wd':keyword
}
url='https://www.baidu.com/s?'
response=requests.get(url=url,params=params)
#修改响应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding='utf-8'
data=response.text
filename=keyword+'.html'
with open(filename,'w',encoding='utf-8') as file:
file.write(data)
print('爬取成功!')
第一版测试:
参数动态化:
如果请求的url携带参数,且我们想要将携带的参数进行动态化操作那么我们必须:
1.将携带的动态参数以键值对的形势封装到一个字典中
2.将该字典作用到get方法的params参数中即可
3.需要将原始携带参数的url中将携带的参数删除
import requests #引入模块
keyword=input('请输入关键字:')
#携带了请求参数的url,如果想要爬取不同关键字对应的页面,我们需要将url携带的参数进行动态化
#实现参数动态化:
#params参数(字典):保存请求时url携带的参数
params={
'wd':keyword
}
url='https://www.baidu.com/s?'
response=requests.get(url=url,params=params)
#修改响应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding='utf-8'
data=response.text
filename=keyword+'.html'
with open(filename,'w',encoding='utf-8') as file:
file.write(data)
print('爬取成功!')
第一版测试:
打开爬取的网页发现异常数据缺失。导致异常访问的原因:
- 异常的访问请求
- 网站后台已经检测出该次请求不是通过浏览器发起的请求而是通过爬虫程序发起的请求。(不是通过浏览器发起的请求都是异常请求)
- 网站后台是通过判定请求头中的User-Agent来进行判定的
- 什么是User-Agent
- 请求载体的身份标识
- 什么是请求载体
- 浏览器
- 浏览器的身份标识是统一固定的,身份标识可以从抓包工具中获取
- 爬虫程序
- 身份标识是各自不同
- 反爬机制:
- UA检测:网站后台会检测请求对应的User-Agent,以判定当前请求是否为异常请求。
- 反反爬策略:
- UA伪装
- 伪装流程:
- 从抓包工具中捕获到某个基于浏览器请求的User-Agent的值,将其伪装作用到一个字典中,将该字典作用到请求方法(get,post)的headers参数中即可。



