栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

爬虫(learing)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫(learing)

1、分类:

2、 流程:

 3、http/https协议

http协议:超文本传输协议,默认端口为80,明文传输;

https协议:http+ssl(安全套接字层),对传输内容加密,默认端口为443;

爬虫主要关注的请求头与响应头:

1)Content-type:内容类型(document文本内容、png图像文件)

2)host:域名

3)connection:连接类型,keep-alive(长连接)

4)Upgrade-Insecure-Requests:升级为https请求(307重定向)

5)User-Agent:用户代理(系统信息以及浏览器信息)

6)Referer:页面跳转处(用于检验是否为爬虫访问,防盗链(图片/视频))

7)cookie:状态保持,有时效性

响应头:set-cookie:服务器设置cookie到用户浏览器的缓存

4、响应状态码:200(成功)、302(跳转,新的url在响应的location中)、303(post重定向)、307(get重定向)、403(资源不可用,拒绝访问)、404(找不到页面)、500(服务器内部错误)、503(服务器受访问过多,负载过高,无法响应),

network抓包不要看element返回的源码,要看具体文件的response源码!!!

5、Requests模块 —— get() 

Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档

1)发送请求:url->requests.get(url)-> .text

2)响应对象:手动修改编码格式:response.encoding='utf8';

3)两种返回对象区别:response.text:str;  response.content:bytes; response.content.decode()解码,里面可以传'utf-8','GBK','iso-8859-1'等等编码字符集

4)常见响应对象属性:

url = "www.baidu.com"
response = requests.get(url)

response.encoding = 'utf8' ##手动设定编码格式

print(response.url)  ##响应url

print(response.status_code)  ##状态码

print(response.request.headers)  ##响应对应的请求头

print(response.headers) ##响应头

print(response.cookies)  ##响应的cookies

print(response.json()) ##自动将json字符串类型的响应内容转换成python对象

5)请求头:

import requests
url = "http://www.baidu.com"
response = requests.get(url)
print(len(response.text))
print(response.content.decode())

#请求头
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'}
response1 = requests.get(url,headers=header)
print(len(response1.text))

6)发送带参数的请求,第一种是直接url直接加上参数;

url = "https://www.baidu.com/s?wd=python"

第二种是构造参数字典,get()传入

data = {'wd':'python'}
url = "https://www.baidu.com"
response = request.get(url,params=data)

7)发送带有cookie参数,模拟保持登录

参数字典header:

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
'cookie':'BIDUPSID=B3C094FD6A0FEE417C2703340B4AF2DTM=1603963404BDUSS=RvbTFia3BaLUJzcVJhSXJLS1ozWjIzeHJXb0N1YjlYQnVWcEd6LTZ3VmRrZDlmSVFBQUFBJCQAAAAAAAAAAAEAAAB9t594uKG7qrS10akAAAAAAAAAAAAAAAAAAAAAA' 
}  ##随便复制了一些

url = "https://www.baidu.com"
response = requests.get(url,headers=headers)

 更优雅的写法,将cookie写成字典:

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}  

cookies='BIDUPSID=B3C094FD6A0FEE417C2703340B4AF2DTM=1603963404BDUSS=RvbTFia3BaLUJzcVJhSXJLS1ozWjIzeHJXb0N1YjlYQnVWcEd6LTZ3VmRrZDlmSVFBQUFBJCQAAAAAAAAAAAEAAAB9t594uKG7qrS10akAAAAAAAAAAAAAAAAAAAAAA'

cookies_dict = {cookie.split('=')[0]:cookie.split('=')[1] for cookie in cookies.split(';')}

url = "https://www.baidu.com"
response = requests.get(url,headers=headers,cookies=cookies_dict)

8)超时参数timeout,表示当超过这个时间,则访问取消(强制停止,节省时间)

response = requests.get(url,timeout=3)  ##超时为3s

9)代理使用:代理ip是一个ip,指向一个代理服务器,负责帮助用户端向服务端转发请求

正向代理:浏览器知道最终处理请求服务器的真实ip地址,比如vpn

反向代理:浏览器不知道最终服务器真实ip地址,为服务端进行负载均衡,为最终处理请求的服务器转发请求,比如nginx

代理ip分类(根据透明度进行分类):

透明代理:目标服务器能够查找到客户端ip地址,目标服务器收到的请求头如下:

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Your IP

匿名代理:服务器能感知到是通过代理进行转发,但是不知道客户端ip地址:

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Proxy IP

高级代理:服务器无法确定转发请求是否为代理(一般使用高级代理最好):

REMOTE_ADDR = Proxy IP

HTTP_VIA = not determined

HTTP_X_FORWARDED_FOR = not determined

proxies = {
    'http': 'http://12.34.56.79:9527',
    'https':'https://12.34.56.79:9527'
}

response = requests.get(url,proxies=proxies)

协议有三种,http、https(主要用这两种)以及socks

免费代理ip:国内高匿免费HTTP代理IP - 快代理(但是容易出现很多ip代理已经挂掉)

10)使用verify参数忽略CA证书(因为存在CA证书过期/不合法的网站,一般人工访问会出现信任安全的弹框界面)

response = requests.get(url,verify=False)  ##忽略CA证书认证

6、Request模块 —— post()

模拟金山词霸爬虫案例:百度翻译post爬虫案例_m0_59091819的博客-CSDN博客

7、

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号