一.爬虫的基本介绍

如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据。

1.核心:

1.爬取网页:爬取整个网页 包含了网页中所有得内容
2.解析数据:将网页中你得到的数据 进行解析
3.难点:爬虫和反爬虫之间的博弈

2.用途:

数据分析/人工数据集
社交软件冷启动
舆情监控

二.Urllib的基本使用

1.步骤

首先:import urllib.request,导入这个Urllib库。

  • urllib.request.urlopen() 模拟浏览器向服务器发送请求
  • response 服务器返回的数据
  • response的数据类型是HttpResponse
  • getcode() 获取状态码
  • geturl() 获取url
  • getheaders() 获取headers

2.编码解码

字节‐‐>字符串,解码decode
字符串‐‐>字节,编码encode

3.读取方法

  • read() 字节形式读取二进制
    扩展:rede(5)返回前几个字节
  • readline() 读取一行
  • readlines() 一行一行读取 直至结束

4.实践:

import urllib.request

# 1.定义一个url
url = 'http://www.baidu.com/ '

# 2.模拟浏览器向服务器发生请求
# 传入参数时可以顺序传参还可以位置传参
response = urllib.request.urlopen(url)

# 3.read方法 返回的是字节形式的二进制数据
# 二进制数据转换为字符串:解码 decode('编码的格式')
content = response.read().decode('utf-8')

# 打印数据
print(content)

打印结果是一个html文件

三.下载资源

下载文件,会自动保存到本目录下:urllib.request.urlretrieve()
其中下载练习这个目录是我提前创建好的。

# 导入urllib,来获取源码
import urllib.request

# url:下载的路径
# filename:保存文件的路径
# 其中参数也可以直接写值

# 示例1:下载图片
url_img= 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F2b524048-f4aa-4785-a9c1-091e4b14c2e6%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1695132191&t=b8cbc406d67f0003e9747a589bf0475b'

urllib.request.urlretrieve(url_img, filename='下载练习/杨幂.jpg')

# 示例2:下载视频,要到本地才能打开观看
url_video='https://haokan.baidu.com/f4c27c65-d28f-4148-805e-a8ed63dbdd8d'
urllib.request.urlretrieve(url_video, filename='下载练习/汽车视频.MP3')

四.请求对象的定制

1.url

  1. url示例:https://www.baidu.com/s?wd=周杰伦
    http/https www.baidu.com 80/433 s wd=周杰伦 #
    协议 + 主机 + 端口号 + 路径 +参数 + 锚点

  2. 常见的端口号:
    http 80
    https 443
    mysql 3306

2.示例(1)

.不同:加入了请求头,以字典的方式储存,使得服务器能够识别客户使用的操作系统(伪装者),最后在控制台上打印出来。

import urllib.request

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

# UA介绍:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头。
# 使得服务器能够识别客户使用的操作系统(伪装者)

# UA信息放在一个字典当中,第一个反爬,识别不了是真正的浏览器
headers = {
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}

# urlopen方法中不能储存字典,所以headers不能传进入

# 请求对象的定制,Request
# 请求时带上UA,关键字传参数,注意传参数时有顺序
request = urllib.request.Request(url,headers=headers)

# 将定制对象整体传进urlopen方法中
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

3.示例(2)

  • 这是一个经典的教学案例,百度翻译,首先打开网址。
  • 检查(F12),观察network,一个字母一个字母输入单词,观察变化。
  • 找到请求头和数据。
  • 字符串编码解码,最后在以json对象的形式输出。
import urllib.request
import urllib.parse

url = 'https://fanyi.baidu.com/sug'

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}

keyword = input('请输入您要查询的单词:')

data = {
'kw':keyword
}

data = urllib.parse.urlencode(data).encode('utf‐8')


request = urllib.request.Request(url=url,data=data,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf‐8')
print(content)

# 字符串-> josn对象
import json
obj = json.loads(content)
print(obj)

结果:
在这里插入图片描述

更多推荐