python学习 第三天 python爬虫
一爬虫原理
1 什么是互联网
指的是一堆网络设备,把一台台的计算机互联网到一起称之为互联网
2 互联网建立的目的
互联网建立的目的是为了数据的传递以及数据的共享
3 什么是数据
例如淘宝,京东商品信息等
东方财富、雪球网的一些证券投资信息
链家、自如等房源信息
12306的票务信息
4 上网的全过程
—普通用户
打开浏览器===>往目标站点发送请求===>获取响应数据===>渲染到浏览器中
—爬虫程序:
模拟浏览器===>往目标站点发送请求===>获取响应数据===>提取有价值的数据===>持久化到数据中
5 浏览器发送的是什么请求
http协议的请求
-客户端
浏览器是一个软件===>客人端的IP和端口
-服务器
www.jd.com(京东域名)===>DNS解析===>京东服务端的IP和端口
http+ssl://www.jd.com/
客户端的IP和端口===>服务端的IP和端口发送请求可以建立链接获取相应数据
6 爬虫的全过程
1发送请求 (需要请求库:requests请求库,Selenium请求库)
2获取响应数据 (只要往服务器发送请求,请求通过后会返回响应数据)
3解析并提取数据 (需要解析库:re,BeautifulSoup4、Xpath.......)
4保存到本地
(文件处理、数据库、MongoDB存储库)
二 requests请求库
爬虫单个网页
import requests #导入requests请求库
#
#往百度网站发送请求,获取响应对象
response=requests.get(url='https://www.baidu.com')
#设置字符编码为utf-8
response.encoding='utf-8'
#打印响应文本
print(response.text)
#把响应文本写入本地
with open('baidu.html','w',encoding='utf-8') as f:
f.write(response.text)
1 安装
—打开cmd
—输入:pip3 install requests
2使用
①先往梨视频主页发送请求
https://www.pearvideo.com/
解析获取所有视频的id:video_1570302
re.findall()
②获取视频详情页url
标题:惊险!男子抢上地铁滑倒
https://www.pearvideo.com/video_1570302
爬虫单个视频
import requests
video_url='https://www.pearvideo.com/video_1570302'
response=requests.get(url=video_url)
print(response.text)
#往视频源地址(视频右击空白处,点检查,右击sh'pin)发送请求
response=requests.get('https://video.pearvideo.com/mp4/adshort/20190625/cont-1570302-14057031_adpkg-ad_hd.mp4')
#打印二进制流,比如图片、视频等数据
print(response.content)
#保存视频到本地
with open('视频.mp4','wb') as f:
f.write(response.content)
爬虫所有主页上的梨视频
import requests import re #正则,用于解释文本数据 # #先往梨视频主页发送请求 response=requests.get('https://www.pearvideo.com/') # # print(response.text) # # # #re正则匹配获取所有视频id # #参数1:正则匹配规则 # #参数2:解析文本 # #参数3:匹配模式 res_list=re.findall('<a href="video_(.*?)"',response.text,re.S) print(res_list) # #拼接每一个视频详情页url for v_id in res_list: detail_url='https://www.pearvideo.com/video_'+ v_id print(detail_url) # # #对每一个视频详情页发送请求获取数据 response=requests.get(url=detail_url) #print(response.text) # # #解析并提取详情页视频url # #视频url video_url=re.findall('srcUrl="(.*?)"',response.text,re.S)[0] print(video_url) #视频名称 video_name=re.findall( '<h1 class="video-tt">(.*?)</h1>',response.text,re.S)[0] print(video_name) v_response=requests.get(video_url) with open('%s.mp4'%video_name,'wb')as f: f.write(v_response.content) print(video_name,'视频爬取成功')
爬虫豆瓣电影前十页(包括电影排名,主演等)
import requests import re # #爬虫三部曲 # # 1.发送请求 def get_page(base_url): response=requests.get(base_url) return response # 2解析文本 def parse_index(text): res = re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演:(.*?)</p>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>', text, re.S) # # return res # # 3保存数据 def save_data(data): with open('double.txt','a',encoding='utf-8') as f: f.write(data) # # #main +回车键 if __name__=='__main__': #num=10 num=0 for line in range(10): base_url=f'https://movie.douban.com/top250?star={num}&filter=' num+=25 print(base_url) # #发送请求,调用函数 response=get_page(base_url) # #解析变量 movie_list=parse_index(response.text) # #3保存数据 # #数据的格式化 for movie in movie_list: #print(movie) # #解压赋值 # #电影排名,电影url,电影名称,主演,评分,人数,简介 v_top,v_url,v_name,v_daoyan,v_point,v_num,v_desc=movie #v_top=movie[0] #v_url=movie[1] movie_content=f''' 电影排名:{v_top} 电影url:{v_url} 电影名称:{v_name} 电影主演:{v_daoyan} 电影评分:{v_point} 电影人数:{v_num} 电影简介:{v_desc} \n ''' print(movie_content) save_data(movie_content)