url、域名、IP、爬虫
(图片来自b站up主——编程八点档)
':' : 分隔主机域名
'/' :分隔主机域名和路径
'?' : 分隔路径和查询参数
'=' : 设定参数的值
'&' : 分隔不同的查询参数对
我们用浏览器搜索的时候,用的是关键字(查询参数)
我们可以通过修改查询参数,实现在同一个IP域名下,快速爬取不同的元素
IP地址:192.168.1.xx
域名:www.baidu.com(用字符化的形式来对计算机网络中的主机进行网络标识)
域名是为了保证每个网站服务器的访问地址是独一无二的,它需要向统一管理域名的集构或组织注册或备档
所有主机设备上网都需要IP地址,但并不是所有主机设备都需要申请域名
我们来找一下百度的ip地址
在cmd中输入ping www.baidu.com , 就可以看到查询到这个域名的ip地址
我们试试用IP访问:
url采用的是ASCII编码方式,不是Unicode,所以url网址中不能有非ASCII的字符
我们在浏览器中输入关键字是中文啊?——因为浏览器已经对url里的中文进行了编码
我将网址复制下来之后其实是这样的:
https://www.baidu.com/s?ie=UTF-8&wd=%E6%88%91%E5%9C%A8%E5%8A%AA%E5%8A%9B%E5%AD%A6%E4%B9%A0
编码 quote()
解码 unquote()
from urllib import parse
key_word = '我在努力学习'
key_word_ascii = parse.quote(key_word)
print(key_word_ascii)
会打印出一串ASCII字符:%E6%88%91%E5%9C%A8%E5%8A%AA%E5%8A%9B%E5%AD%A6%E4%B9%A0
如果要爬虫的话
涉及的代码:
from urllib import parse, response
from urllib import request
key_word = '我在努力学习'
key_word_ascii = parse.quote(key_word)
print(key_word_ascii)
response = request.urlopen("http://www.baidu.com/s?ie=UTF-8&wd{0}".format(key_word_ascii))
result = response.read().decode('utf-8')
print(result)
另一种方式:
import requests
url = "http://www.baidu.com/s?ie=UTF-8&wd=我在努力学习"
response = requests.get(url)
response.encoding = 'UTF-8'
print(response.text)