爬虫基础教学第一节

目录

​​​​本节知识目录:


1.开发爬虫的基本流程

2.我们的第一个爬虫程序

3.urllib响应对象的使用

4.Request对象的使用

5.urllib发送get请求

 

一.开发爬虫的基本流程

  1. 基本流程
    1. 目标数据:我们想要爬取什么数据
    2. 数据来源的地址
    3. 结构分析
    4. 实现代码
  2. 基本手段
    1. 破解请求限制
      1. 请求头设置
      2. 控制请求频率
      3. IP代理
    2. 破解登录授权
      1. 请求带上用户cookie信息
    3. 破解验证码
      1. 简单的验证码可以使用识图读验证码第三方库
  3. 解析数据

    • HTML Dom解析

      • 正则匹配,通过的正则表达式来匹配想要爬取的数据,如:有些数据不是在html 标签里,而是在html的script 标签的js变量中
      • 使用第三方库解析html dom,比较喜欢类jquery的库
    • 数据字符串

      • 正则匹配(根据情景使用)
      • 转 JSON/XML 对象进行解析

二.我们第一个爬虫程序

比如我们现在要去访问百度这个网址,我们要取百度根目录页面上面的数据

首先我们要导入pyhon第三方库中自带用来发送请求的对象

from urllib.request import urlopen

然后我们要把请求的地址定义成一个变量

url = 'http://www.baidu.com/'

然后发送请求,然后它会返回对象我们用变量接受

resp = urlopen(url)

然后打印我们爬取的数据

print(resp.read().decode()[:100])

代码结合:

from urllib.request import urlopen

#请求的地址
url = 'http://www.baidu.com/'

#发送请求
resp = urlopen(url)
print("\n")
#打印响应的结果
print(resp.read().decode()[:100])

三.urllib响应对象的使用

  1. requset.urlopen(url,data,timeout)
    1. 第一个参数url即为URL,是必须要传送的。第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
    2. 第二三个参数是可以不传送的,data默认为空None,timeout默认为socket._GLOBAL_DEFAULT_TIMEOUT
  2. response.read()

    1. read()方法就是读取文件里的全部内容,返回bytes类型
  3. response.getcode()
    1. 返回 HTTP的响应码,成功返回200,4服务器页面出错,5服务器问题
  4. response.geturl()
    1. 返回 返回实际数据的实际URL,防止重定向问题

四:Request对象的使用

Request对象的使用主要使用用于封装作用,Request可以传入headers请求头的参数,我们爬虫开发伪装爬虫的时候几乎都需要用到

1.怎么在网站中查看请求头信息

1.首先我们要找到我要爬取数据的网址

2.然后右键点击检查

3.然后选择网络

4.然后找到大概率是第一行的这个信息

5.然后下滑找到User-Agent

然后这个后面就是请求头信息

 然后我们对这个Request进行代码举例

#request可以用来封装请求头
from urllib.request import Request,urlopen

#请求地址
url = 'http://httpbin.org/get'
#设置请求头
heardes = {'User-Agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36"}
#创建Request对象
res = Request(url,headers=heardes)
#发送请求
resq = urlopen(res)
#打印响应结果
print(resq.read().decode())

五.urllib发送get请求

get请求里面解决url里面有中文的问题
首先讲解一下在python自带urllib.parse库里面有两个转码函数quote,urlencode

quote是对单个词进行转码

urlencode是对key和value转码,就相当于python里面的字典

比如我们现在对爬虫这个词和{'wd':'python'}进行转码

1.导入转码的库函数

from urllib.parse import quote,urlencode

2.然后进行转码

#quote是对单个值进行转换的
args = 'python爬虫'
print(quote(args))
#urlencode是对键值对进行转换的
arg  = {'wd':'python爬虫'}
print(urlencode(arg))

3.结果

'''
两个值转换的结果
python%E7%88%AC%E8%99%AB
wd=python%E7%88%AC%E8%99%AB
'''

然后我们用这个来操作爬虫实例

我们要去访问python爬虫有关的知识

from urllib.request import urlopen,Request
from urllib.parse import quote


args =input('请输入要搜索的内容:')
url = f'https://www.baidu.com/s?wd={quote(args)}'
headers = {
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47'
}
req = Request(url,headers = headers)
resp = urlopen(req)
print(resp.read().decode())

  • 51
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值