爬虫-Requests
安装
1 | pip install requests |
- 官方文档
- Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
用来做什么?
和urllib
功能相似,Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的,一切动力都来自于根植在 Requests 内部的 urllib3。
get
请求
- 定制头部
data
:是一个原生字典即可requests.get(url, headers=headers, params=data)
- 响应对象
1
2
3
4
5
6
7r.text 字符串形式查看响应
r.content 字节类型查看响应
r.encoding 查看或者设置编码类型
r.status_code 查看状态码
r.headers 查看响应头部
r.url 查看所请求的url
r.json() 查看json格式数据 - 示例1:不带参数的get
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
def main():
url = 'https://www.baidu.com/'
r = requests.get(url=url, headers=headers)
print(r)
# print(r.encoding)
# r.encoding = 'utf8'
print(r.text)
if __name__ == '__main__':
main() - 示例2:带参数的get
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
def main():
url = 'https://www.baidu.com/s?'
data = {
'ie': 'utf8',
'kw': '中国',
}
# parameters 参数
r = requests.get(url=url, headers=headers, params=data)
# 字符串形式查看响应
print(r.text)
# 字节类型查看响应
print(r.content)
# 查看或者设置编码类型
print(r.encoding)
# 查看状态码
print(r.status_code)
# 查看响应头部,字典格式
print(r.headers)
# 查看所请求的url
print(r.url)
# 把结果写入到文件中
with open('baidu.html', 'wb')as fp:
fp.write(r.content)
if __name__ == '__main__':
main()
post
请求
- 必应翻译
formdata
: 是一个原生字典即可r = requests.post(url=url, headers=headers, data=formdata)
- 示例:
post
请求1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
def main():
url = 'https://cn.bing.com/tlookupv3?isVertical=1&&IG=0E3F5DBC7C494B948709B072893BAC89&IID=translator.5028.11'
formdata = {
'from': 'en',
'to': 'zh-Hans',
'text': 'wolf',
}
r = requests.post(url=url, headers=headers, data=formdata)
# 查看json格式数据
print(r.json())
if __name__ == '__main__':
main()
ajax
、get
、post
- 和上面的是一样的
代理
r = requests.get(url, headers=headers, proxies=proxies)
- 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
def main():
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=ip'
# 代理
proxies = {
'http': 'http://123.101.207.231:9999'
}
r = requests.get(url, headers=headers, proxies=proxies)
with open('daili.html', 'wb')as fp:
fp.write(r.content)
if __name__ == '__main__':
main()
cookie
- 实现人人登录
- 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30import requests
# 如果碰到会话相关的问题,要首先创建一个会话
# 往下所有的操作都通过s进行访问 s.get s.post
s = requests.Session()
post_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018561026257'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
formdata = {
'email': '17701256561',
'icode': '',
'origURL': 'http://www.renren.com/home',
'domain': 'renren.com',
'key_id': '1',
'captcha_type': 'web_login',
'password': '7b456e6c3eb6615b2e122a2942ef3845da1f91e3de075179079a3b84952508e4',
'rkey': '44fd96c219c593f3c9612360c80310a3',
'f': 'https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dm7m_NSUp5Ri_ZrK5eNIpn_dMs48UAcvT-N_kmysWgYW%26wd%3D%26eqid%3Dba95daf5000065ce000000035b120219',
}
r = s.post(url=post_url, headers=headers, data=formdata)
# print(r.text)
get_url = 'http://www.renren.com/960481378/profile'
r = s.get(url=get_url, headers=headers)
print(r.text)
chinaunix
- 登录的思路是:先get获取登录所需要的一些参数,再post登录,再get访问登录后的页面
- 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
# 创建会话
s = requests.Session()
def main():
# 访问登录页面,获取登录所需要的一些参数
get_url = 'http://account.chinaunix.net/login/?url=http%3A%2F%2Fbbs.chinaunix.net%2Fforum.php'
r = s.get(url=get_url, headers=headers)
# 生成soup对象,获取_token值
soup = BeautifulSoup(r.text, 'lxml')
# 通过属性选择器获取对应的值
_token = soup.select('input[name=_token]')[0]['value']
# print(_token)
# 向指定的post发送请求
post_url = 'http://account.chinaunix.net/login/login'
formdata = {
'username': 'xxx',
'password': 'xxx',
'_token': _token,
'_t': '1598882760234',
}
r = s.post(url=post_url, headers=headers, data=formdata)
print(r.text)
# 访问登录后的页面
info_url = 'http://bbs.chinaunix.net/home.php?mod=space&uid=69983003&do=profile'
r = s.get(url=info_url, headers=headers)
with open('info.html', 'wb')as fp:
fp.write(r.content)
if __name__ == '__main__':
main()
公交爬取
1 | import time |
验证码
登录古诗文网
1 | import requests |
简介
- Tesseract最初是在1985年至1994年之间在布里斯托惠普实验室和科罗拉多州格里利惠普公司开发的,1996年进行了一些更改以移植到Windows,并在1998年进行了一些C ++化。2005年Tesseract开放由HP采购。自2006年以来,它是由Google开发的。
- 光学识别,但是不要对它期望太高。只能识别简单的验证码。
安装
pip install pytesseract
pip install pillow
- 下载Tesseract OCR,密码:6uj7
- 安装Tesseract OCR
- 要从任何位置访问tesseract-OCR,可能必须将tesseract-OCR二进制文件所在的目录添加到Path变量中(可能是)
C:\Program Files\Tesseract-OCR
。
示例
1 | import pytesseract |
打码平台
- 打码兔、云打码
- 以云打码为例
1
2
3注册普通用户、开发者
然后下载PythonHTTP接口示例
将里面的username\password\appid\appkey修改即可 - 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41from YDMHTTPDemo3 import YDMHttp
# 普通用户的用户名和密码
# 用户名
username = 'username'
# 密码
password = 'password'
# 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得! 就是软件代码,需要在我的软件中添加软件
appid = xxxx
# 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
appkey = 'appkey'
# 图片文件
filename = 'sg3p.png'
# 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = 1004
# 超时时间,秒
timeout = 60
# 检查
if (username == 'username'):
print('请设置好相关参数再测试')
else:
# 初始化
yundama = YDMHttp(username, password, appid, appkey)
# 登陆云打码
uid = yundama.login();
print('uid: %s' % uid)
# 查询余额
balance = yundama.balance();
print('balance: %s' % balance)
# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
cid, result = yundama.decode(filename, codetype, timeout);
print('cid: %s, result: %s' % (cid, result))
百度文字识别
-
简介
基于百度云的文字识别接口,需要申请百度云账号,然后再创建文字识别应用,最后获得需要的参数AppID、API Key和Secret Key
-
百度云OCR识别申请教程
-
安装
1
pip install baidu-aip
-
SDK文档
-
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28from aip import AipOcr
# 你的 APPID AK SK
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
def main():
# 读取图片
image = get_file_content('4.png')
# 调用通用文字识别, 图片参数为本地图片
print(client.basicGeneral(image))
# 调用通用文字识别(高精度版)
print(client.basicAccurate(image))
if __name__ == '__main__':
main() -
通用文字识别 返回示例
1
2
3
4
5
6
7
8
9{
"log_id": 2471272194,
"words_result_num": 2,
"words_result":
[
{"words": " TSINGTAO"},
{"words": "青島睥酒"}
]
} -
资费说明
API 状态 调用量限制 通用文字识别(标准版) 免费使用 50000次/天免费 通用文字识别(高精度版) 免费使用 500次/天免费
-
简介
带带弟弟OCR通用验证码识别SDK免费开源版
-
环境要求
3.8 <= Python <= 3.10.0
Windows/Linux..
-
调用方法
-
安装
1
pip install ddddocr
-
调用
1
2
3
4
5
6
7
8
9
10import ddddocr
ocr = ddddocr.DdddOcr()
with open('code.png', 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)
-
-
参数说明
-
DdddOcr 接受两个参数
参数名 默认值 说明 use_gpu False Bool 是否使用gpu进行推理,如果该值为False则device_id不生效 device_id 0 int cuda设备号,目前仅支持单张显卡 -
classification
参数名 默认值 说明 img 0 bytes 图片的bytes格式
-
下载视频
示例1:测试
1 | import os |
这两种方式都可以下载视频。
示例2:实操
1 | # 使用selenium+xpath+requests下载视频 |