鱼C论坛

 找回密码
 立即注册

2018717

已有 202 次阅读2018-7-17 21:53

爬虫:获取网页提取、保存信息的自动化程序
获取网页:urllib、request
提取信息:正则表达式、css、xpath、Beautiful soup、lxml
保存数据:txt,json
抓取的内容:基于http、http协议
javaScript渲染页面
现在许多的网页可能都是JavaScipt渲染出来的,原始的HTML代码可能就是空壳。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>This is a Demo</title>
</head>
<body>
<div id='container>
</body>
<script src='app.js></script>
</html>
因为引入了这个app.js文件,urllib等无法继续加载这个javascript文件。

无状态http:http协议对事务处理没有记忆能力。
会话、cookies:服务器端辨别用户身份,进行会话跟踪而隐藏在用户本地终端的数据
cookies结构(application-cookies):
name:改cookie的名称
value:cookie的值。如果为Unidode 需要为字符编码。如果为二进制,需要使用BASE64编码
Domain:可以访问该cookie的域名。如果设置为zhihu.com,则所有以zhihu。com结尾的域名都可以访问该cookie
MAX age:cookie失效时间。为负数时关闭浏览器立刻生效
path:cookie的使用路径,只有为概论经的页面可以访问该cookie
size:cookie大小
Http字段:如此属性为True,则只有HTTP头中会带有此cookie的信息。
secure:改cookie是否使用安全传输协议。

注:大部分会话机制使用cookie保存ID信息,而关闭浏览器之后COOkie就消失了,所以再次连接服务器时,再也无法找到原来的会话了
。如果把cookie保存在硬盘上,或者改写服务器发出的HTTP请求,把原来的cookie发给服务器,则会保持原来的状态。

代理服务器(proxy server)的基本原理:
本机《》代理服务器《》网站,同样可以正常访问,是服务器无法辨别ip,实现了ip伪装。

代理的作用:
突破IP访问限制、访问内部资源、提高访问速度、隐藏真实ip。

urllib库:
request模块:最基本的http请求模块,可以模拟发送请求只需传入url、参数等。
error:异常处理模块。如果出现异常,我们可以捕获她保证程序不会终止。
parse:提供了url处理方法,比如拆分、解析,合并等
robotparser:判断网站的可爬性。

发送请求:
urlopen(),最基本的http方法,可以模拟浏览器的请求发起过程。
import urllib.request
response=urllib.request.urlopen('http://www.python.org')#(一个httpResponse对象)
print(response.read().decode('utf-8))#(使用read得到返回内容),status得到结果的状态码)

import urllib.request
response=urllib.request.urlopen('http://python.org')
print(response.status)
print(response.getheaders())
print(response.getheaders('Server'))

前两个输出了响应的状态码跟响应的头信息,最后一个传入参数Server获取了响应头中的Server值

urllib函数的API:
urllib.request.urlopen(url,data=none,[timeout],cafile=None,cadefault=False,context=None)

data参数:如果添加该参数,需使用bytes()转化为字节流编码形式,而且请求会变为post。
import urllib.parse
import urllib.request
data=bytes(urllib.parse.urlencode({'word':'hello'}),encoding='utf-8')
response=urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read())
我们传入了一个word,值为hello,出现在了FROM字段里,表明是模拟了post表单提交方式。

timeout参数:超过了这个请求的时间,没有得到响应,就会抛出异常。
import urllib.request
response = urllib.request.urlopen('http://httpbin.org/get',time=0.1)
print(response.read())












































路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部