一.requests 库
这是我们调用访问网址的接口所在的库
1.设置headers请求头
import requests
url = 'https://www.lmonkey.com/'
# 定义头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
res = requests.get(url=url)
code = res.status_code
print(res)
如果不设置headers请求头,网站就会知道我们是一个python程序,从而不让我们访问(甚至会封禁我们的ip);设置请求头就是将我们的python程序伪装成一个浏览器。
2. get请求
光说大家肯定会暴躁,来看一段代码
import requests
# 定义url
url_1 = 'https://www.baidu.com'
# 发生get请求
res = requests.get(url=url_1)
"""
# 获取响应结果
print(res) #<Response [200]>
print(res.status_code) #请求状态码
print(res.content) #b'...' 二进制的文本流
print(res.content.decode('utf-8')) #把二进制文本流按指定编码格式转换为字符串
print(res.text) #获取响应的内容
print(res.url) #获取请求的url地址
print(res.request.headers) #h获取请求头信息 request
print(res.headers) #响应头信息 response
"""
这里定义的 url_1 是我们要访问的网址
res = requests.get(url=url_1) 是对我们定义的网址进行一次get请求,请求结果保存在res中。想这种就是模版,大家多写几次就记住了。
print(res.status_code) #请求状态码 ,是我们判断访问是否成功的标志,输出200证明返回成功,常见的失败有404,405啥的,大家应该可以明白这个状态码是啥了。
3.post请求
import requests
u = 'https://fanyi.baidu.com/sug'
# 定义头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
# POST发送的数据
data = {
'kw': '你好'
}
# 发送请求
res = requests.post(url=u, headers=headers, data=data)
# 接收返回数据
print(res.status_code)
# print(res.text)
data 是我们要给网站传送的数据
4.在headers中设置cookie
有的网站的数据需要我们登录才能获取,这时候就要设置cookie了。
import requests
#这是我们想要访问的网站内容
u = 'http://www.rrys2019.com/User/User'
# 定义头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
#这是我们要设置登录cookie的网址
loginurl = 'http://www.rrys2019.com/User/Login/ajaxLogin'
req = requests.session()
data = {
'account': '********', #你自己的账号
'password': '********', #密码
'remember': '1',
'url_back': 'http://www.rrys2019.com/User/User/'
}
# 发送请求
res = req.post(url=loginurl, headers=headers,data=data)
code = res.status_code
# print(code)
print(res.text)
下面教大家找到设置登录cookie的网址
点击登录
找到需要post请求的网址,查看他的内容
发现传递的格式是 {accout:’’,password:’’,remember:’’,url_back:’’}
于是我们就要构造这种传递的方式
data = {
'account': '********', #你自己的账号
'password': '********', #密码
'remember': '1',
'url_back': 'http://www.rrys2019.com/User/User/'
}
这样我们就设置好了登录的cookie,可以获取登录后才能查看的内容了。
到这里你已经学会了获取网站的html的内容。可以自己去尝试一下。https://www.lmonkey.com/users/wLndYGMEg
(可以去试试爬取这个网站的内容)
二. lxml库 (学习使用xpath)
1.绝对路径选择
from lxml import etree
text = '''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spotlight</title>
<link rel="stylesheet" type="text/css" href="index2.css">
<script src="1.js">
</script>
</head>
<body>
<h1 data-spotlight="点击kiki对你卖萌">点击kiki对你卖萌</h1>
<div class="reno">
<div class="reno1"><img id="kiki" src="../images/k1.JPG" οnclick="changeImage()" style="width: 300px;"></div>
</div>
<div class="reno3">
<div class="reno3_1">许佳琪,1995年8月27日出生于浙江省,中国内地流行乐女歌手、影视演员,SNH48一期生,SNH48 Team SII成员,7SENSES成员 ,《青春有你第二季》训练生。</div>
<div class="reno3_1">队内职务: 门面担当、舞蹈担当、Rapper担当</div>
<div><img src="../images/1.PNG" id="image" style="width: 600px; height: 400px;"></div>
<div class="bt">
<button id="next" class="bt1" οnclick="nextImage()">next</button>
<button id="prev" class="bt1" οnclick="prevImage()">prev</button>
</div>
</div>
</body>
</html>
'''
#解析html字符串
html = etree.HTML(text)
#提取数据
r = html.xpath('/html/body/h1/text()')
print(r)
#选择第几个
m = html.xpath('/html/body/div[2]/div[2]/text()')
print(m)
大家这么聪明肯定看代码就知道如何使用xpath了。值得一提的是xpath的下表是从1开始的。such as, div[1].
2.使用类名选择
‘//div[@class=“reno3_1”] 是寻找所有div,再看看谁的’class’=‘reno3_1’。
'/text()'是获取标签内的内容
三.bs4 库 (使用BeautifulSoup)
1.通过标签获取数据
from bs4 import BeautifulSoup
html_doc = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spotlight</title>
<link rel="stylesheet" type="text/css" href="index2.css">
<script src="1.js">
</script>
</head>
<body>
<h1 data-spotlight="点击kiki对你卖萌">点击kiki对你卖萌</h1>
<div class="reno">
<div class="reno1"><img id="kiki" src="../images/k1.JPG" οnclick="changeImage()" style="width: 300px;"></div>
</div>
<div class="reno3">
<div class="reno3_1">许佳琪,1995年8月27日出生于浙江省,中国内地流行乐女歌手、影视演员,SNH48一期生,SNH48 Team SII成员,7SENSES成员 ,《青春有你第二季》训练生。</div>
<div class="reno3_1">队内职务: 门面担当、舞蹈担当、Rapper担当</div>
<div><img src="../images/1.PNG" id="image" style="width: 600px; height: 400px;"></div>
<div class="bt">
<button id="next" class="bt1" οnclick="nextImage()">next</button>
<button id="prev" class="bt1" οnclick="prevImage()">prev</button>
</div>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'lxml')
# 1.通过tag标签对象获取文档数据
# r = soup.link['type']
# r = soup.h1.text
# r = soup.h1.parent.name
print(r)
2.通过find函数查找
# 2.通过搜索获取页面中的元素 find find_all
#r = soup.find('button')
#r = soup.find_all('button',οnclick='nextImage()')
r = soup.find_all('title')
x = r.get_text()
# print(r)
3.通过css标签选择
# 3.css选择器
# 通过标签选择元素;
# r = soup.select('title')
# print(r)
# 通过class,id 选择;
# r = soup.select('.bt1')
# r = soup.select('#next')
# 通过空格 层级关系;逗号,并列关系
r = soup.select('a, title')
print(r)