概念辨析:
1. 1.万维网(www)和互联网
万维网指的是互联网所能提供的服务之一,它的具体是一个超文本互相连接而成的全球性系统(全球性,服务);
2. 2.HTTP
HTTP是一种标准,用于请求和应答:A端的客户端和B端的网站端。
http的请求方法主要有一下几种:
GET:向指定的资源发出“显示”请求。GET方法应该只用于读取数据,而不应当被用于“副作用”的操作中(例如在WebApplication中)。其中一个原因是GET可能会被网络蜘蛛等随意访问。
HEAD:与GET方法一样,都是向服务器发出直顶资源的请求,只不过服务器将不会出传回资源的内容部分。它的好处在于,使用这个方法可以在不必传输内容的情况下,将获取到其中“关于该资源的信息”(元信息或元数据)。
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT:向指定资源位置上传输最新内容。
DELETE:请求服务器删除Request-URL所标识的资源,或二者皆有。
TRACE:回显服务器收到的请求,主要用于测试或诊断
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“*”来代表资源名称向Web服务器发送OPTIONS请求,可以测试服务器共能是否正常。
CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method
Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
网页基础
一个网页=HTML+CSS+JavaScript
具体来说:
HTML 是用来搭建整个网页的骨架;
CSS 是为了让整个页面更好看,包括我们看到的颜色,每个模块的大小、位置等都是由 CSS 来控制的;
JavaScript 是用来让整个网页“动起来”,这个动起来有两层意思,一层是网页的数据动态交互,还有一层是真正的动,比如我们都见过一些网页上的动画,一般都是由 JavaScript 配合 CSS 来完成的。
创建HTML文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<body>
<div id="container">
<div class="wrapper">
<h1>Hello World</h1>
<div>Hello Python.</div>
</div>
</div>
</body>
</html>
创建一个文本文件把后缀改成.html,使用VScode进行编译
谷歌浏览器的开发者模式
Elements:允许用户从浏览器的角度来观察网页,用户可以借此看到Chrome渲染页面所需要的HTML、CSS和DOM(Document Object Model)对象。
Network:可以看到网页向服务气请求了哪些资源、资源的大小以及加载资源的相关信息。此外,还可以查看HTTP的请求头、返回内容等。
Source:即源代码面板,主要用来调试JavaScript。
Console:即控制台面板,可以显示各种警告与错误信息。在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为shell在页面上与JavaScript交互。
Performance:使用这个模块可以记录和查看网站生命周期内发生的各种事情来提高页面运行时的性能。
Memory:这个面板可以提供比Performance更多的信息,比如跟踪内存泄漏。
Application:检查加载的所有资源。
Security:即安全面板,可以用来处理证书问题等。
爬取1
一个网络爬虫程序最普遍的过程:
1.访问站点;
2.定位所需的信息;
3.得到并处理信息。
下面通过Jupyter Notebook 运行python3爬取网站:
request库的使用:request get
https://www.python.org/dev/peps/pep-0020/
import requests
url = 'https://www.python.org/dev/peps/pep-0020/'
res = requests.get(url)
text = res.text
text
指定到了相应的网站之后开始爬取相应的“zon_of_python”中的词
## 爬取python之禅并存入txt文件
with open('zon_of_python.txt', 'w') as f:
f.write(text[text.find('<pre')+28:text.find('</pre>')-1])
print(text[text.find('<pre')+28:text.find('</pre>')-1])
request post
爬取金山词霸的翻译网站:“http://www.iciba.com/”
:
import requests
def translate(word):
url="http://fy.iciba.com/ajax.php?a=fy"
data={
'f': 'auto',
't': 'auto',
'w': word,
}
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
}#User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。
response = requests.post(url,data=data,headers=headers) #发起请求
json_data=response.json() #获取json数据
#print(json_data)
return json_data
def run(word):
result = translate(word)['content']['out']
print(result)
return result
def main():
with open('zon_of_python.txt') as f:
zh = [run(word) for word in f]
with open('zon_of_python_zh-CN.txt', 'w') as g:
for i in zh:
g.write(i + '\n')
if __name__ == '__main__':
main()
利用金山词霸去翻译刚才爬取的zen of python
美丽胜过丑陋。
外显优于内隐…
简单胜于复杂。
复杂胜于复杂。
平比嵌套好…
疏而不密…
可读性计数。
特殊情况不足以打破规则。
尽管实用性胜过纯度。
错误永远不应该悄悄地过去。
除非有明确的沉默。
面对暧昧,拒绝猜测的诱惑…
应该有一种----最好只有一种----明显的办法来做到这一点。
虽然这种方式一开始可能不明显,除非你是荷兰人。
现在总比永远好。
虽然从来没有比现在更好。
如果实施很难解释,那是个坏主意。
如果实现很容易解释,这可能是个好主意。
命名空间是一个伟大的想法-让我们做更多的这些!