python学习 第三天 python爬虫

一爬虫原理

什么是互联网

指的是一堆网络设备,把一台台的计算机互联网到一起称之为互联网

互联网建立的目的

互联网建立的目的是为了数据的传递以及数据的共享

什么是数据

例如淘宝,京东商品信息等

东方财富、雪球网的一些证券投资信息

链家、自如等房源信息

12306的票务信息

 

4 上网的全过程

—普通用户

打开浏览器===>往目标站点发送请求===>获取响应数据===>渲染到浏览器中

—爬虫程序:

模拟浏览器===>往目标站点发送请求===>获取响应数据===>提取有价值的数据===>持久化到数据中

5  浏览器发送的是什么请求

http协议的请求

 

-客户端

浏览器是一个软件===>客人端的IP和端口

 

-服务器

https://www.jd.com/

www.jd.com(京东域名)===>DNS解析===>京东服务端的IP和端口

http+ssl://www.jd.com/

 

客户端的IP和端口===>服务端的IP和端口发送请求可以建立链接获取相应数据

 

爬虫的全过程

  1发送请求            (需要请求库:requests请求库,Selenium请求库)

  2获取响应数据        (只要往服务器发送请求,请求通过后会返回响应数据)

  3解析并提取数据      (需要解析库:re,BeautifulSoup4Xpath.......

  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)

 

安装

       —打开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)

 

posted @ 2019-06-26 21:00  肥宅冲丫  阅读(131)  评论(0编辑  收藏  举报