欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  一、爬虫基本原理
 
  1.什么是爬虫
 
  爬虫就是爬取数据
 
  2.什么是互联网
 
  有一堆网络设备,把一台台的计算机互联到一起称为互联网
 
  3.互联网建立的目的
 
  数据的传递与数据的共享
 
  4.什么是数据
 
  例如:
 
  电商平台的商品信息
 
  链家,自如租房平台的房源信息
 
  ...
 
  12306,票务信息
 
  5.什么是上网
 
  普通用户:
 
  打开浏览器
 
  ——>输入网址
 
  ——>往目标主机发送请求
 
  ——>返回响应数据
 
  ——>把数据渲染到浏览器中
 
  爬虫程序:
 
  模拟浏览器
 
  ——>往目标主机发送请求
 
  ——>返回响应数据
 
  ——>解析并提取有价值的数据
 
  ——>保存数据(文件写入本地、持久化到数据库中)
 
  6.爬虫的全过程
 
  1.发送请求(请求库:Requests/Selenium)
 
  2.获取响应
 
  3.解析数据(解析库:BeautifulSoup4)
 
  4.保存数据(存储库:文件保存/MongoDB)
 
  总结:我们可以把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖宝藏
 
  二、requests请求库
 
  1.安装与使用
 
  pip3installrequests
 
  2.分析请求流程(模拟浏览器)
 
  -百度:
 
  1.请求URL
 
  2.请求方式
 
  3.响应状态码
 
  具体事例如下
 
  '''
 
  爬校花网视频:
 
  一、请求rul
 
  http://www.xiaohaur.com/v/
 
  二、请求方式
 
  get
 
  三、请求头信息
 
  user-agent:用户代理
 
  '''
 
  1importtime
 
  2importrequests
 
  3#爬虫三部曲
 
  4#1.发送请求
 
  5defget_page(url):
 
  6response=requests.get(url)
 
  7returnresponse
 
  8#2.解析数据
 
  9importre
 
  10defparse_index(html):
 
  11#findall匹配所有
 
  12#re.findall('正则匹配规则','匹配文本','匹配模式')
 
  13#re.S:对所有文本进行搜索匹配
 
  14detail_urls=re.findall(
 
  15'<divclass="items"><aclass="imglink"href="(.*?)"',
 
  16html,re.S
 
  17)
 
  18returndetail_urls
 
  19#解析详情页
 
  20defparse_detail(html):
 
  21movie_url=re.findall('<sourcesrc="(.*?)">',html,re.S)
 
  22#print(movie_url)
 
  23ifmovie_url:
 
  24returnmovie_url[0]
 
  25#3.保存数据
 
  26importuuid
 
  27#uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
 
  28defsave_video(content):
 
  29withopen(f'{uuid.uuid4()}.mp4','wb')asf:
 
  30f.write(content)
 
  31print('视频下载完毕')
 
  32#main+回车键
 
  33#测试用例
 
  34if__name__=='__main__':
 
  35forlineinrange(6):
 
  36url=f'http://www.xiaohuar.com/list-3-{line}.html'
 
  37#发送请求
 
  38response=requests.get(url)
 
  39#print(response)
 
  40##返回响应状态码
 
  41#print(response.status_code)
 
  42##返回响应文本
 
  43#print(response.text)
 
  44
 
  45#解析主页页面
 
  46detail_urls=parse_index(response.text)
 
  47
 
  48#循环遍历详情页url
 
  49fordetail_urlindetail_urls:
 
  50#print(detail_url)
 
  51#往每一个详情页发送请求
 
  52detail_res=get_page(detail_url)
 
  53#print(response.text)
 
  54#解析详情页获取视频url
 
  55movie_url=parse_detail(detail_res.text)
 
  56#判断视频url存在则打印
 
  57ifmovie_url:
 
  58print(movie_url)
 
  59
 
  60#往视频url发送请求获取视频二进制流
 
  61movie_res=get_page(movie_url)
 
  62
 
  63#把视频的二进制流传给save_video函数保存到本地
 
  64save_video(movie_res.content)
 
  POST请求自动登录GitHub:
 
  '''
 
  POST请求自动登录GitHub:
 
  一、请求rul
 
  https://github.com/session
 
  二、请求方式
 
  POST
 
  三.请求头
 
  cookies
 
  User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36
 
  四.请求体
 
  fromdata
 
  commit:Signin
 
  utf8:?
 
  authenticity_token:LVyIb9FUxiI6XMain4PXzgOjKn9DzYzqdCwMvosVn+/Cht8LVgCuKjc7fbNfk5TiXf4W+6y56GmRnu1A4T0VIQ==
 
  login:sjdkjw
 
  password:1562132
 
  webauthn-support:supported
 
  '''
 
  #获取token随机字符串
 
  '''
 
  1.访问登录页面获取token随机字符串
 
  一、请求rul
 
  https://github.com/login
 
  二、请求方式
 
  GET
 
  三.请求头
 
  cookies
 
  User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36
 
  2.解析并提取token字符串
 
  #正则
 
  <inputtype="hidden"name="authenticity_token"value="(.*?)"/>
 
  '''
 
  importrequests
 
  importre
 
  login_url='https://github.com/login'
 
  #login页面的请求头信息
 
  login_header={
 
  'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36'
 
  }
 
  login_res=requests.get(url=login_url,headers=login_header)
 
  #print(login_res.text)
 
  #解析提取token字符串
 
  authenicity_token=re.findall(
 
  '<inputtype="hidden"name="authenticity_token"value="(.*?)"/>',
 
  login_res.text,re.S
 
  )[0]
 
  print(authenicity_token)
 
  #2.开始登录github
 
  '''
 
  POST请求自动登录GitHub:
 
  一、请求rul
 
  https://github.com/session
 
  二、请求方式
 
  POST
 
  三.请求头
 
  cookies
 
  User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36
 
  四.请求体
 
  fromdata
 
  commit:Signin
 
  utf8:?
 
  authenticity_token:LVyIb9FUxiI6XMain4PXzgOjKn9DzYzqdCwMvosVn+/Cht8LVgCuKjc7fbNfk5TiXf4W+6y56GmRnu1A4T0VIQ==
 
  login:****
 
  password:*****
 
  webauthn-support:supported
 
  '''
 
  #获取login页面的cookies信息
 
  login_cookies=login_res.cookies.get_dict()
 
  #session登录url
 
  session_url='https://github.com/session'
 
  #请求头信息
 
  session_headers={
 
  'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36'
 
  }
 
  #请求体信息
 
  form_data={
 
  "commit":"Signin",
 
  "utf8":"?",
 
  "authenticity_token":"authenicity_token",
 
  "login":"****",
 
  "password":"*****",
 
  "webauthn-support":"supported"
 
  }
 
  session_res=requests.post(url=session_url,
 
  headers=session_headers,
 
  cookies=login_cookies,
 
  data=form_data
 
  )
 
  withopen('github1.html','w',encoding='utf-8')asf:
 
  f.write(session_res.text)
 
  

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h54666.shtml