python爬虫[笔记记录一]
python爬虫[笔记记录二]
爬虫的定义:
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(来自百科)
我的环境:python3.7.1
没有什么过多的原理,主要是代码
先介绍下面两个模块,分别是requests、beautifulsoup4,如果你要看selenium,请看python爬虫[笔记记录二]
导航
requests模块
简单介绍:
Requests 是用Python语言编写,基于 urllib3,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求,它是一个Python第三方库,处理URL资源特别方便。使用 Requests 发送网络请求非常简单。Requests 支持 Python 2.6—2.7以及3.3—3.7,而且能在 PyPy 下完美运行。
配置requests模块:
首先安装:1
pip3 install requests
导入模块:1
import requests
requests库常见的几种方法:
准确的来说应该是8种方法,你可以在下面这个文件里面看到
在 你的python目录/python3.7/site-packages/requests/api.py 文件里面可以看到下方的8种常见方法
1 | requests.request('method','https://smelond.com/method') # 下面所有方法都会用到这个request,具体可以看api.py源代码 |
本文主要讨论的是get、post、put
get 方法:
GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import requests
result = requests.get('https://smelond.com/index.php') # GET请求,获取result的一个Response 对象
print(result) # Response 对象
print(result.url) # 打印当前url
print(result.text) # 获取返回的源代码
print(result.content) # 获取返回的源代码 字符串是bytes 类型
print(result.cookies) # 打印当前的cookies,他返回的是一个RequestCookieJar的实例,像一个字典
print(requests.utils.dict_from_cookiejar(result.cookies)) # 以字典方式显示这个cookie
print(tuple(result.cookies))
print(result.headers) # 打印当前的headers信息
print(result.encoding) # 打印当前的网站编码(UTF-8、ISO-8859-1)
print(result.elapsed) # 获取响应时间
print(result.history) # 获取请求历史
print(result.raw) # 获取来自服务器的原始套接字,他是一个类
print(result.raw.read(10)) # 获取来自服务器的原始套接字
print(result.reason) # 返回响应,没有这个页面就返回一个Not Found,有就返回OK
print(result.status_code) # 获取返回的状态码
post 方法:
POST 方法 发送数据给服务器. 请求主体的类型由 Content-Type 首部指定。
1
2
3
4
5
6
7
8
9
10
11
import json,requests
data = {
'username': 'admin',
'password': '123456'
}
request_conn = requests.Session() #用session对象发出get请求,设置cookies,这样当我们第二次去访问需要登录的url链接时就不会要求重新登录
result = request_conn.post('https://smelond.com/login.php',data=data) # 发送一个post请求数据登录包
result = request_conn.post('https://smelond.com/login.php',data=json.dumps(data)) # 发送一个json请求数据登录包
result = request_conn.post('https://smelond.com/login.php',json=data) # 发送一个json请求数据登录包,json参数会自动将字典类型的对象转换为json格式
其他方法与get类似
put 方法:
PUT 用于新增资源或者使用请求中的有效负载替换目标资源的表现形式。
1 | import requests |
请求时可携带的其他参数:
他们也是一些requests的高级用法
在 /python3.7/site-packages/requests/sessions.py 第466行可以看到
这些参数几乎对每一个方法都通用,他们分别是:1
2
3
4
5
6
7
8
9
10
11
12
13
14> * params 把参数加到url后面
> * data 字典,提交一个post请求
> * headers 字典,HTTP定制头
> * cookies 字典,携带cookie访问
> * files 字典,传输文件
> * auth 元组,支持HTTP认证功能,具体可以产考(http://docs.python-requests.org/zh_CN/latest/user/authentication.html)
> * timeout 数字,设置访问超时时间
> * allow_redirects bool,重定向
> * proxies 字典,设置代理访问,支持http、https、socks5
> * hooks 字典,事件挂钩
> * stream bool,响应体内容工作流(当使用requests进行下载时,可使用这个参数)
> * verify [bool,本地证书路径],SSL 证书验证
> * cert 元组,客户端证书
> * json 字典,提交一个json请求
具体可以查看文档:python高级用法 传送门
beautifulsoup4模块
简单介绍
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautiful Soup库是解析、遍历、维护“标签树”的功能库。
配置beautifulsoup4模块
首先安装:1
pip3 install beautifulsoup4
导入模块:1
from bs4 import BeautifulSoup
ta有一个内置解析器html.parser
他还有几个解析器:1
2
3pip3 install xml
pip3 install lxml
pip3 install html5lib
html5lib的解析方式与浏览器相同
基本用法
假设我现在的网站为https://smelond.com/ 那么在没有修改任何服务器配置情况下,他的主页默认可能会为index.html,所以requests默认访问的就是index.html
index.html 文件内容为:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<meta charset="utf-8">
<title>BeautifulSoup4</title>
</head>
<body>
<div>
<a href="https://qq.com" class="v">qq</a>
<a href="https://www.sina.com" class="v">sina</a>
<a href="https://www.baidu.com" class="v">baidu</a>
<p class="123">test<p>
</div>
</body>
</html>
基本操作,获取页面内容
1 | from bs4 import BeautifulSoup # 导入BeautifulSoup4 |
常见的一些用法
1 | print(soup.get('href')) # 找到a标签的href参数的值 |
还有很多其他的用法 具体可以查看 BeautifulSoup4 传送门