requests模块
import reqeusts
# get 请求
# 网址
url_login = "url://123.com"
# 请求头
headers = {
'User-Agent': 'Apipost client Runtime/+https://www.apipost.cn/'
}
# 参数,形式字典
kw = {key:value}
response = reqeusts.get(url=url_login,params=kw)
# post 请求
esponse = reqeusts.post(url=url_login)
# 使用代理
proxies的形式:字典
proxies = {
"http": "http://代理地址1",
"https": "http://代理地址2"
}
# 用法
reqeusts.get("http://www.baidu.com",proxies=proxies)
# 使用session
# 实例化一个session对象
# 使用该对象发送get或post请求
session = reqeusts.session()
response = session.get(url,headers=headers)
# 后续使用session请求url会自动携带session完成访问
# 把cookie对象转化为字典
reqeusts.util.dict_from_cookiejar
# 请求ssl证书验证
response = reqeusts.get(url="https://url_login",verify=False)
# 设置请求超时
response = reqeusts.get(url,timeout=10)
# 配合状态码判断是否请求成功(断言)
assert response.status_code == 200
对象.名词 --- 属性
对象.动词 --- 方法
response.text
- 类型 :str
- 修改编码方式:response.encoding="gbk"
- 多用于文本
response.content
- 类型:bytes
- 修改编码方式:response.content.deocde("utf-8")
- 多用于图片等二进制文件保存
数据分类
非结构化数据:html
处理方法: 正则表达式、 xpath
结构化数据:json、xml等
处理方法:转化为python数据类型
json 模块
import json
json中的字符串都是双引号引起来的
如果不是双引号:
eval:能实现字符串和python类型的转化
replace: 把单引号替换为双引号
正则表达式
用事先定义好的一些特殊字符,及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑
常用正则的方法:
- re.complie(编译)
- pattern.match(从头找一个)
- pattern.search(找一个)
- pattern.findall(找所有)
- pattern.sub(替换)
原始字符串r,字符串中有\带来的转义效果,r能忽视反斜杠
点号默认情况下匹配不到"\n"
"\s" 能够匹配空白字符,不仅能包含空格,还有"\t|\r|\n"
贪婪(.*)非贪婪(.*?)
xml
xpath节点选择
语法
lxml使用注意点
lxml补不全功能会使程序出现错误,使用etree.tostring观察html文件样子 完成校验。
lxml可以接受bytes和str字符串
提取页面数据的思路
先分组,
在遍历每一个分组取其中数据
爬虫的工作流程
搜索引擎流程
抓取网页-> 数据存储-> 预处理 -> 提供检索服务,网站排名
聚焦爬虫流程
url list -> 响应内容 - > 提取数据 -> 入库
/\ |
| - 提取url
需要爬取的数据位置:
- 当前url地址对应的响应中
- 其他的url地址对应的响应中(ajax请求中)
- js生成的(部分数据在响应中,或者全部数据由js生成)
格式化字符串
print("hello %s" % "小明")
print("hello {}".fromat("小明"))
列表推导式
# 生成列表
[i for i in range(3)]
# 生成列表时增加判断
[i + 3 for i in range(3) if i%2==0]
cookie和session
- cookie 数据存放在客户的浏览器上,session数据存放在服务器上
- cookie不是很安全,可以对cookie进行分析进行cookie欺骗
- session会在一定时间内保存在服务器上,当访问增多,会占用服务器资源。
- 单个cookie保存的数据不能超过4K,浏览器限制一个站点最多保存20个cookie