1、爬虫原理:模拟浏览器——往目标站点发送请求——获取响应数据——提取有价值的数据——持久化到数据中
2、爬虫过程:发送请求(request请求库,selenium请求库)
——获取响应数据(注意服务器发送请求,请求通过后返回响应数值)
——解析并提取数据(需要解析库:re.beautifulsoup4.xpath)
——保存到本地(文件处理,数据库,MongoDB数据库)
3、导入requests请求库
4、爬百度网页:
import requests #导入request请求库
response=requests.get(url="https://www.baidu.com/")
response.encoding="utf-8"
print(response.text)
with open('baidu.html','w',encoding='utf-8')as f:
f.write(response.text)
5、导入视频:
import requests
往视频源地址发送请求
response=requests.get(
"https://video.pearvideo.com/mp4/short/20190625/cont-1568862-14057323-hd.mp4")
# 打印二进制流,比如图片、视频等数据
print(response.content)
保存视频到本地
with open('视频.mp4','wb')as f:
f.write(response.content)
'''
1、先往梨视频主页发送请求
https://www.pearvideo.com/
2、解析获取所有视频的id:
video_1570107
re.findall()
2、获取视频详情页url:
'''
import requests
import re#正则 用于解析文本数据
#1、先往梨视频主页发送请
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)
#拼接每一个视频详情页
for v_id in res_list:
detial_url="https://www.pearvideo.com/video_"+v_id
print(detial_url)
#对每一个视频详情页发送请求获取视频
response=requests.get(url=delattr())
video_url=re.findall('srcUrl="(.*?)"',response.text,re.S)[0]
print(video_url)
video_name=re.findall('<h1 class="video-tt">(.*?)</h1>',response.text.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,'视频读取完成')
6、抓包分析:打开浏览器的开发者模式(检查)———选中network,找到访问页面横后缀xxx.html(相应文本)
请求方式:get:直接发送请求获取数据
post:携带用户信息地址发送请求:{’uesr‘:’tank‘’pwd‘:‘123’}
状态响应码:2xx:成功
3xx:重定向
4XX:找不到资源
5XX:编码错误请求头信息:
user_agent:用户代理(证明是通过电脑社设备发送的请求)
cookies:登录用户真实信息(证明你是目标网址的用户)
referer:上一次访问的url,证明你是从目标网址跳转过来的
请求体:post:请求才会有请求体 form data{'user:'"tank"'psw':'123'}
第一页url:
第二页url:
1.发送请求
2.解析数据库
3.保存数据
\
.:从当前位置开始
*:查找所有
?:找到第一个不找
.*?:非贪婪匹配
.*:贪婪匹配
(.*?):提取括号内数据
1.排名:
'''
import requests
import re
def get_page(base_url):
response=requests.get(base_url)
return response
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
#保存数据
def save_data(data):
with open('douban.txt','a',encoding='utf-8')as f:
f.write(data)
#main+回车键
if __name__== '_main_':
num = 0
for line in range(10):
base_url =f'https://movie.douban.com/top250?start={num}&filter='
num+=25
print(base_url)
#发送1请求,调用函数
response=get_page(base_url)
#解析文本
movie_list=parse_index(response.text)
#保存数据 数据的格式化
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)