代理ip的使用以及多进程爬取
一.代理皮的简单使用
简单的看一二例子即可 import requests #代理ip 高频的ip容易被封,所以使用ip代理 #免费代理 ip:www.goubanjia.com 快代理 西祠代理 headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36' } url='https://www.baidu.com/s?wd=ip' #ip代理的使用proxies,先指定协议的类型,http,https,再指定ip的端口 page_text=requests.get(url=url,headers=headers,proxies={'https':'1.10.186.79:8080'}).text with open('ip.html','w',encoding='utf-8') as f: f.write(page_text)
二.多进程爬取
import requests import re import random from multiprocessing.dummy import Pool from lxml import etree #多线程爬取一定是在耗时比较多的情况下 headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER' } #爬取第一页数据 url='https://www.pearvideo.com/category_6' page_text=requests.get(url=url,headers=headers).text tree=etree.HTML(page_text) #xpath解析返回一个列表 li_list=tree.xpath('//ul[@id="listvideoListUl"]/li') # print(li_list) #循环列表获取视频的url #解析出视频详情页的url video_url_list=[] for li in li_list: detail_url='https://www.pearvideo.com/'+li.xpath('./div/a/@href')[0] detail_page_text=requests.get(url=detail_url,headers=headers).text ex='srcUrl="(.*?)",vdoUrl' video_url=re.findall(ex,detail_page_text,re.S)[0]#re.单行匹配,一定要记得写,返回的额还是列表 # 存放的是所有视频的url video_url_list.append(video_url.rstrip('"')) #从网页直接获取视频 def video_download(url): return requests.get(url=url,headers=headers).content #保存下来的视频 def save_video(data): name=str(random.randint(1,5000))+'.mp4' with open(name,'wb') as f: f.write(data) print(name+'保存成功') if __name__ == '__main__': # #获取视频数据和写入都是比较耗时间的,我我们就用多进程进行会比较块 # #实例化一个进程池 pool=Pool(5) #map函数接收两个参数,第一是函数,第二是可迭代对象,函数会依次作用到可迭代对象的每一个元素 video_data=pool.map(video_download,video_url_list) print("-->",video_data) #持久化存储视频的过程也是比价耗时间的,所以需要多进程会比较块一点 pool.map(save_video,video_data) pool.close() pool.join()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器