2020.7.6 15:01
数据抓取
Library分为:
- requests
- urllib
- Library
工具:
4. curl
5. wget
6. httpie
卸载了ubuntu,难受
下载curl,之前先下openssl。
401是未登录,403是无权限,400是bad request
request头包括
curl参数说明:
参数 | 说明 | 实例 |
---|---|---|
-A | 设置user-agent | curl -A “Chrome” http://www.baidu.com |
-X | 用指定方法请求 | curl -X POST http://httpbin.org/post |
-I | 只返回请求的头信息 | curl -I https://www.baidu.com |
-d | 以post方法请求url,并发送相应的参数, 用&连接多个参数或者写多个-d,或者用引号 甚至用文件来<文件名> | curl -d text = 123 http://www.httpbin.org/post |
-O | 用远程文件名保存文件 | curl -O http://httpbin.org/image/jpeg |
-o | 下载文件并以指定文件名保存 | curl -o fox.jepg http://httpbin.org/image/jpeg |
-L | 跟随重定向请求 | curl -IL https:/baidu.com |
-H | 设置头信息 | curl -o C:/image.jpg -H “accept:image/jpg” http://httpbin.org/image |
-K | 允许发起不安全的ssl请求 | |
-b | 设置cookies | curl -b text = hh http://httpbin.org/cookies |
-s | 不显示其他消息 | |
命令和表达式 | ||
: /d+ : 匹配数字 | ||
: ** | grep**:可以使其匹配返回东西 |
wget
参数 | 描述 | 实例 |
---|---|---|
-O | 下载文件并以指定文件名保存 | curl -o fox.jepg http://httpbin.org/image/jpeg |
–limit-rate | 指定下载速度 | wget --limit-rate … |
-c | 断点续传,-c的当前文件才会续传 | |
-b | 后台下载 | |
-U | 设置user-agent | |
–mirror | 镜像某个目标网站 | |
-p | 下载资源文件如CSS,JS | |
-r | 递归下载所有网站中的链接 | |
–convert-links | 将相对链接改为绝对链接 | |
-s | 不显示其他无关的信息 | |
-V | 显示连接过程中的所有相关信息 |
例子
镜像下载网站
wget -c --mirror -U "Mozilla" -p --convert-links
http://docs.python-requests.org
httpie
使用pip下载httpie,使用的时候是http。可以直接用httpie来访问网页。
爬虫的库
urllib
urllib.request的urlopen使用方法,
#urlopen 类似于一个流操作对象,返回一个对象,他的read方法返回的是二进制,用decode方法来解码。
from urllib.request import urlopen
import json
f = urlopen("http://httpbin.org/get")
text = f.read()
#print(text.decode("utf-8"))
print(dir(text))
#json字符串转化成字典
json.loads(text)
#状态码
print(f.status)
#头
print(f.headers)
设置user-agent
ua = ''
req = urllib.request.Request("http://httpbin.org.user-agent")
req.add_header("user-Agent", ua)
r = urllib.request.urlopen(req)
指定用户名
使用get参数
#传递get参数
params = urllib.parse.urlencode({"spam": 1, "eggs":2, "bacon": 3})
url = "http://httpbin.org/get?%s"%params
with urllib.request.urlopen(url) as f:
print(json.loads(f.read()))
使用post参数
data = urllib.parse.urlencode({"spam": 1, "eggs":2, "bacon": 3})
data = data.encode()
with urllib.request.urlopen("http://httpbin.org/post", data) as f:
print(json.load(f))
使用ip代理
#使用一个ip代理
proxy_handler = urllib.request.ProxyHandler({"http:":"ip:proxy"})
#有用户名,密码的ip
#proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
opener = urllib.request.build_opener(proxy_handler)
r = opener.open("http://httpbin.org/ip")
print(r.read())
得到url的字典
#urllib.parse.urlparse使用
o = urllib.parse.urlparse("http://guye:123@httpbin.org/get?a=8&b=5#test")
print(o.netloc)
print(o.username)
requests库
#get请求
r = requests.get("http://httpbin.org/get")
# print(r.status_code, r.reason)
# print(r.text)
r.close()
#post请求
r1 = requests.post("http://httpbin.org", data = {'a':'1'})
print(r1.text)
r1.close()
#get带参数的请求
r2 = requests.get("http://httpbin.org/get", params = {'a':'1'})
print(r2.text)
r2.close()
#带cookies的请求
cookies = dict(userid = "123456", token = "XXXXXXXXXXXXXXXXXXXXXXXXXX")
r3 = requests.get("http://httpbin.org/cookies", cookies = cookies)
print(r3.text)
#Basic-auth认证请求
r4 = requests.get("http://httpbin.org/basic-auth/guye/123456", auth = ("guye", "123456"))
print(r4.text)
#抛出异常
r4.raise_for_status()
r4.close()
#Session对象会保存服务器返回的set-cookies头信息里面的内容
s = requests.Session()
s.get("http://httpbin.org/cookies/set/userid/123456789")
r = s.get("http://httpbin.org/cookies")
print("检查session的cookies", r.text)
#使用ip代理
r = requests.get("http://httpbin.org/ip", proxies = {"https":"39.99.200.70:25565"})
print(r.text)
#timeout属性
requests.get("http://httpbin.org/delay/4", timeout = 5)