爬取糗图百科图片
import os # 导入os模块
import requests # 导入爬虫模块
import re # 导入re模块
import time # 导入时间模块
if not os.path.exists(r'糗图百科图片'): # 检查'糗图百科图片'文件夹如果不存在 执行子代码
os.mkdir(r'糗图百科图片') # 创建'糗图百科文件夹'
for i in range(1,5): # 根据观察 每个页数的变化就是尾部添加第几页 所以可以添加for循环爬取1-5页
url="https://www.qiushibaike.com/imgrank/%s"%i # 尾部添加百分号占位符
res=requests.get(url) # 向网址发送get请求
res_text=res.text # 获得该网址的text文本内容
# print(res_text) 检查内容
list = re.findall('img src="(.*?)" alt="糗事.*"', res.text)
#print(list)
for name in list: # for循环该列表
real_list='http:'+name # 给所有这个列表中的地址开头加上http:
# print(real_list) # 检查内容
res1=requests.get(real_list) # 向图片地址发送请求
time.sleep(1) # 使程序停顿一秒 缓解对方服务器压力
res_name=real_list.rsplit('/')[-1]# 给地址从/右边做右切片取值
file_path=os.path.join(r'糗图百科图片',res_name) # 图片文件名与文件路径拼接
with open(file_path,'wb')as f: # 以二进制模式写入文件
f.write(res1.content) # 将请求到的内容以二进制单位写入文件
print('爬取成功')
爬取优美图库
import requests # 导入爬虫模块
import os# 导入os模块
from bs4 import BeautifulSoup # 导入bs4模块
import time
if not os.path.exists(r'美女图片'): # 检查文件夹美女图片是否存在
# 不存在则创建
os.mkdir(r'美女图片')
url='https://www.umei.cc/meinvtupian/rentiyishu/' # 获取美女分类网址
res=requests.get(url)# 向该网址发送get请求
res.encoding='utf8'# 通过打印res.text发现有乱码现象, 所以指定字符编码为utf8
# print(res.text)
soup=BeautifulSoup(res.text,'lxml') # 使用bs4模块,对res.text进行解析
tag=soup.find(name='div',attrs={'class':'TypeList'}) # 通过观察网页得知img标签在 name=div, class=typelist中的li标签中
# print(tag)
li_list=tag.find_all(name='li') # 获得所有tag中所有li标签
base_url='https://www.umei.cc'#先定义一个底层网址
# print(li)
for li in li_list: #对li标签进行for循环
a_tag=li.find(name='a') # 获得所有a标签
a_link=a_tag.get('href') # 在a表中获得所有href网址
# print(a_link)
real_link=base_url+a_link # 将底层网址与href网址进行拼接
# print(real_link)
res1=requests.get(real_link) #向该图片网址发送get请求
res1.encoding='utf8' # 经查看有乱码现象 进行转码
# print(res1.text)
soup1=BeautifulSoup(res1.text,'lxml') # 对该网址进行解析
img_tag=soup1.select('div.ImageBody img') # 通过该网址找到 div标签中所有class=imagebody中所有img标签
for img in img_tag: # 对这些img进行for循环
src=img.get('src') # 获得图片网址
# print(src)
res2=requests.get(src) # 向图片网址发送请求
name=src.rsplit('/')[-1] # 给图片起名字,/向右切割
file_path=os.path.join(r'美女图片',name) # 将美女图片与名字进行文件路劲拼接
with open(file_path,'wb')as f: # 打开该文件路径 二进制模式写入
f.write(res2.content)# 写入网址的二进制数据
print('爬取成功')
爬取梨视频
import requests
from bs4 import BeautifulSoup
import os
if not os.path.exists(r'梨视频'):
os.mkdir(r'梨视频')
base_url= 'https://www.pearvideo.com/'#先定义主网站
# 通过观察得知点击分类后 获取页面数据
url='https://www.pearvideo.com/category_8'
res=requests.get(url) # 向网站发送get请求
# print(res.text) 检查一下
soup=BeautifulSoup(res.text,'lxml') #使用bs4模块进行解析
# 通过观察网络源代码 发现视频存在于li标签
li_list=soup.select('li.categoryem ')
# print(li_list)
for li in li_list:
a_tag=li.find(name='a')
href=a_tag.get('href')
# print(href)
"""
通过观察得知该网站的网页数据不是直接加载的,朝他发请求没用 并且通过network观察网址朝另个一个网址发送get请求 复制该网址发现无法访问
获得核心动态请求的核心数据:
https://video.pearvideo.com/mp4/adshort/20210920/1632326942931-15771122_adpkg-ad_hd.mp4
真正的视频网址:
https://video.pearvideo.com/mp4/adshort/20210920/cont-1742158-15771122_adpkg-ad_hd.mp4
所以只需要把viedio=1742158中的数字取出替换掉1632326942931这串数字即可
"""
"""
由于有防盗链防爬措施,所以需要添加referers
"""
id=href.split('_')[-1] # 获得数字部分
# print(id)检查
headers={"Referer": "https://www.pearvideo.com/video_%s" % id} #构造referer参数
res1=requests.get('https://www.pearvideo.com/videoStatus.jsp' # 朝该网址发送get请求
,params={'contId':id} # 携带视频id参数
,headers=headers # 携带请求头中的referer
)
# print(res1.text)
data=res1.json() #转换成json格式字符串
mp4_url=data['videoInfo']['videos']['srcUrl'] # 里面是三个列表互相嵌套,先去videoinfo 再取videos 再取srcurl
# print(mp4_url) 检查
systemTime=data['systemTime'] # 那一串需要替换的字符就是参数systemtime
# print(systemTime) 检查
real_url=mp4_url.replace(systemTime,'cont-%s'% id) #把那段数字换成id cont-不动
# print(real_url)检查
res2=requests.get(real_url) #朝第三次拼接的网址发送请求
name=real_url.rsplit('t-')[-1] # 给视频取名
file_path=os.path.join(r'梨视频',name) # 文件路径拼接
with open (file_path,'wb') as f: #以二进制模式打开文件
f.write(res2.content)#写入二进制模式视频
print('爬取成功')