欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 爬虫(持续更新ing)

爬虫(持续更新ing)

2025/7/6 9:02:12 来源:https://blog.csdn.net/jwqzhn/article/details/146022287  浏览:    关键词:爬虫(持续更新ing)

爬虫(持续更新ing)

# 网络请求
# url统一资源定位符(如:https://www.baidu.com)
# 请求过程:客户端的web浏览器向服务器发起请求
# 请求又分为四部分:请求网址,请求方法(get、post、put等),请求头,请求体
# 浏览器中一般都在f12中去看,推荐谷歌会清晰一点
# 爬虫概念:模拟浏览器发送请求获取响应
# 反爬概念:保护重要数据,阻止恶意网络攻击
# 反反爬:针对反爬做防御措施
# 爬虫的作用:1、数据采集 2、软件测试 3、抢票 4、网络安全 5、web漏洞扫描
# 通过爬取网站的数量分类:通用爬虫(如搜索引擎)、聚焦爬虫(如12306抢票)就是专门爬某个网站的数据, 通用爬虫爬取网站数量没有上线,聚焦爬虫:爬取网站数量有限,有明确目标
# 聚焦爬虫根据获取数据为目的分类:功能性爬虫、数据增量爬虫 功能性爬虫不获取数据,只为了实现某种功能,如投票、抢票、短信轰炸等 数据增量爬虫获取数据用于后续分析,url与数据同时变化,则整条新数据,url不变,数据变化,数据部分更新
# 爬虫基本流程:url->对url发送网络请求,获取浏览器的请求响应->解析响应,提取数据->保存数据
# robots协议,有些时候无法获取时,可以修改robots# 网络通信
# 浏览器:url
# DNS服务器:ip地址标注服务器
# DNS服务器返回ip地址给浏览器
# 浏览器拿到ip地址去访问服务器,返回响应
# 服务器返回的数据可能是js,hmtl,jpg等等
# 网络通信的实际原理:一个请求对一个数据包(文件)
# 之后抓包可能会有很多个数据包,共同组成了这个页面# http协议和https协议
# http协议规定了服务器和客户端互相通信的规则
# http协议:超文本传输协议,默认端口80
# 超文本:不仅仅限于文本,还可以是图片、音频、视频
# 传输协议:使用共用约定的固定格式来传递换成字符串的超文本内容
# https协议:http+ssl(安全套接字层) 默认端口443
# ssl对传输内容进行加密
# https比http更安全,但是性能更低
# http请求/响应的步骤:1、客户端连接web服务器 2、发送http请求 3、服务器接收请求返回响应 4、释放连接tcp连接 5、客户端解析html内容# 请求头
# 请求方式 get/post、put等
# get一般来说都是想服务器要数据的详情接口,而post一般是给服务器数据,提交接口
# user-agent:这个是模拟正常用户的操作关键	
# cookies:这个是登录保持,一般老一点的网站用这个,新的都用token
# referer:当前这一次请求是从哪个请求过来的

request模块

# 依赖安装 pip install requests
# 文本,html,css等字符串形式
import requests
url='https://www.baidu.com'
res=requests.get(url)
# text 这个方式内容会乱码,str类型,request模块自动根据http头部对响应编码做出有根据的推测
# res.encoding='utf-8' 当然你也可以指定编码类型
# print(res.text) 
# content bytes类型,可以通过decode进行解码 打印响应,这个是解码后的,默认进行utf-8
print(res.content.decode())
# 这个就是把这个内容保存为html
# with open('baidu.html','w',encoding='utf-8') as h:
#     h.write(res.content.decode())
#输出 这样就把所有的https://www.baidu.com请求拿到了
# 打印响应的url
print('url',res.url)
# 打印响应对象的请求头
print('request headers',res.request.headers)
# 打印响应头
print('res headers',res.headers)# 图片 把图片存到img下面
import requests
url='https://www.baidu.com/img/flexible/logo/pc/result.png'
res=requests.get(url)
with open('./img/jwq.png','wb') as img:img.write(res.content)# 模拟浏览器发送请求
import requests
url='https://www.baidu.com'
# 构建请求头 user-agent添加的目的是为了让服务器认为我们是浏览器发送的请求,而不是爬虫软件
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
# headers参数接收字典形式的请求头
res=requests.get(url,headers=headers)
print(res.content.decode())
print(len(res.content.decode())) #查看这个响应内容的长度
print(res.request.headers) #查看响应对象的请求头# user-agent池 为了防止反爬
# 先演示手动添加的user_agents池
import requests
import random
url='https://www.baidu.com'
# 构建 user_agents池
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60','Opera/8.0 (Windows NT 5.1; U; en)','Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0','Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',
]
ua=random.choice(user_agents)
# 构建请求头 user-agent添加的目的是为了让服务器认为我们是浏览器发送的请求,而不是爬虫软件
headers={'user-agent':ua
}
# headers参数接收字典形式的请求头
res=requests.get(url,headers=headers)
# print(res.content.decode())
print(len(res.content.decode()))
print(res.request.headers)# 使用三方库 fake-useragent
# 安装 pip install fake-useragent
from fake_useragent import UserAgent
# 构建 user_agents池
ua = UserAgent()
# 获取随机浏览器用户代理字符串
print(ua.random)# 使用param携带参数 quote 明文转密文 unquote 密文转明文
import requests
from fake_useragent import UserAgent
from urllib.parse import quote,unquote
# quote 明文转密文
# unquote 密文转明文
# print(quote('学习'))
# print(unquote('%E5%AD%A6%E4%B9%A0'))
# 构建 user_agents池
ua = UserAgent()
url='https://www.baidu.com/s'
# 你要是不想使用params的话,你可以使用模板语法
# url=f'https://www.baidu.com/s?wd={name}'
#构建请求参数
name=input('请输入关键词:')
params={'wd':name
}
headers={'user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers,params=params)
print(res.content.decode())# 获取网易云的图片
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://p1.music.126.net/_JcHT6u-TYhxjDbO3IhVQA==/109951170537166630.jpg?imageView&quality=89'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('img/网易云.jpg','wb') as f:f.write(res.content)# 获取qq音乐音频
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://ws6.stream.qqmusic.qq.com/RS02064dfdIM38rSZY.mp3?guid=7976864250&vkey=AE4590431EAD34766DBAA9BA1A3715B3B45721EE23180669EA694EB7CA1F0DB4C8DE867A9883D4E897ED4E6F2ECF600CDFD34C78F2C07E09__v215192d1e&uin=554242051&fromtag=120052'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('video/晴天.mp3','wb') as f:f.write(res.content)# 获取qq音乐mv
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://mv6.music.tc.qq.com/44B177558A20632E722F75FB6A67025F0BFC15AB98CC0B58FD3FC79E00B2EEDC9FAC3DF26DD0A319EACA6B2A30D24E2CZZqqmusic_default__v21ea05e5a/qmmv_0b53feaagaaao4ae4d5t4vtvikiaamuqaa2a.f9944.ts'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('video/qq音乐.mp4','wb') as f:f.write(res.content)# 获取百度贴吧 翻页
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://tieba.baidu.com/f?'
name=input('请输入关键词:')
page=int(input('请输入要保存的页数:'))
for i in range(page):params = {'kw': name,'ie': 'utf-8','pn': 0}headers = {'user-agent': ua.random}# 通过params携带参数res = requests.get(url, headers=headers,params=params)# print(res.content.decode())with open(f'html/{name}{i+1}.html', 'wb') as f:f.write(res.content)# 获取百度贴吧转换为面向对象方式
import requests
from fake_useragent import UserAgent
class TieBa:def __init__(self):self.url='https://tieba.baidu.com/f?'self.headers = {'user-agent': UserAgent().random}# 发起请求def send(self,params):# 通过params携带参数res = requests.get(self.url, headers=self.headers,params=params)return res.text# 保存def save(self,page,con):with open(f'html/{page}.html', 'w',encoding='utf-8') as f:f.write(con)# 程序运行def run(self):name = input('请输入关键词:')pages = int(input('请输入要保存的页数:'))for page in range(pages):params = {'kw': name,'ie': 'utf-8','pn': pages * 50}data=self.send(params)self.save(page,data)
te =TieBa()
te.run()# 金山翻译 post
import requests
from fake_useragent import UserAgent
import jsonurl = 'https://ifanyi.iciba.com/index.php?c=trans'
headers = {'user-agent': UserAgent().random
}
name=input('请输入翻译内容:')
post_data = {'from': 'zh','to': 'en','q': name,
}
res = requests.post(url, headers=headers,data=post_data)
res.encoding = 'utf-8'
dict=json.loads(res.text)
print(dict['out'])# 下面就是中文的翻译
#输入 请输入翻译内容:中文
#输出 the Chinese language# 代理
# 分为正向代理和反向代理
# 正向代理:给客户端做代理,让服务器不知道客户端的真实身份(说句实在话就是保护自己的ip不会暴露,要封也是封代理ip)
# 反向代理:给服务器做代理,让浏览器不知道服务器的真实地址
# 正向代理保护客户端,反向代理保护服务端
# 实际上理论应该分为三类:透明代理(服务器知道我们使用了代理ip,也知道真实ip)、匿名代理(服务器能够检测到代理ip,但是无法知道真实ip)、高匿代理(服务器既不知代理ip,也不知道真实ip)
# proxies代理
import requests
from fake_useragent import UserAgent
url='https://www.baidu.com'
headers={'user-agent':UserAgent().random
}
# 构建代理字典
proxies={'http':'1.1.1.1:9527','https':'1.1.1.1:9527'
}
res=requests.get(url,headers=headers,proxies=proxies)
print(res.content.decode())

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词