【爬虫&APP逆向003】视频数据爬取&Cookie&代理
  jersHK05me2f 2023年11月14日 38 0


视频数据爬取

url:https://www.51miz.com/shipin/
	爬取当前url页面中营销日期下的几个视频数据。
找寻每个视频的播放地址:
	通过观察视频详情页的页面数据,并没有发现视频的播放地址,只有一张播放图片。
	打开抓包工具,点击页面的播放按钮,找到了视频的播放数据包,可以提取出视频的播放地址,地址格式为:

代码

import requests
from lxml import etree
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
url = 'https://www.51miz.com/shipin/'
response = requests.get(url=url, headers=headers)
page_text = response.text

# 数据解析
tree = etree.HTML(page_text)
div_list = tree.xpath('/html/body/div[2]/div[2]/div[1]/div[2]/div[2]/div')
for div in div_list:
    src_list = div.xpath('./a/div/div/div/video/source/@src')
    # 要给视频地址进行补全
    for src in src_list:
        # src就是一个完整的视频地址
        src = 'https:' + src
        video_data = requests.get(url=src, headers=headers).content
        video_title = src.split('/')[-1]
        with open(video_title, 'wb') as fp:
            fp.write(video_data)
        print(video_title, '爬取保存成功!')

Cookie

什么是cookie?
	cookie的本质就是一组数据(键值对的形式存在)
	是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。
	如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问。
		典型的案例:网站的免密登录
爬取雪球网中的咨询数据
	url:https://xueqiu.com/,需求就是爬取热帖内容
	经过分析发现帖子的内容是通过ajax动态加载出来的,因此通过抓包工具,定位到ajax请求的数据包,从数据包中提取:
		url:https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=311519&size=15
		请求方式:get
		请求参数:拼接在了url后面

代码:

import requests
import os
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
    'cookie':'device_id=776dd9573632e238144202943a82bad3; acw_tc=276077b116981434047567142e4d1040609c9939d9d487ac9475ebdc43ed97; xq_a_token=e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557; xqat=e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557; xq_r_token=2a5b753b2db675b4ac36c938d20120660651116d; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMDY5OTg3NSwiY3RtIjoxNjk4MTQzMzkyMjM1LCJjaWQiOiJkOWQwbjRBWnVwIn0.NRqC-VG8W1Zp9kscMQy8H1rHCgTP2jqm_v_nHIwnU6UeVcCmOY8acJOAMdDCS8ysLq22VUFF0b9_5RPwB3iXUf8qpXLrhIKEPukv2xssetUuvyueRFlUb8JrFMo5BSWMp22TaN1IH2TVuQOhBdDD0IeL1GBnYfiksLFGnhhlfk5TIZHEnmEokGHdg8W0ntn9C7kuhcCwCrtYOXRvR50Az9FANcbLDTiqpu22a9bx5P4SsD1XH6ap-8UwrQJ5yfQNfEY1UEHwRUuEl9S8TnjwN9Keb_avvwyk7wF-4LNlEsCrHakHAOzhZU_Gadm0UZaSMSzZaMis6b48J6czrvl0kQ; cookiesu=641698143404764; u=641698143404764; Hm_lvt_1db88642e346389874251b5a1eded6e3=1698143406; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1698143763'
}
url = 'https://xueqiu.com/statuses/hot/listV2.json'
param = {
    "since_id": "-1",
    "max_id": "311519",
    "size": "15",
}
response = requests.get(url=url,headers=headers)
data = response.json()
print(data)

或者:自动获取cookie

import requests

headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
}
param = {
    #如果遇到了动态变化的请求参数?必须经过测试才知道需不需要处理
    "since_id": "-1",
    "max_id": "553059", #动态变化的请求参数
    "size": "25"
}

url = 'https://xueqiu.com/statuses/hot/listV2.json'

#session对象会实时保存跟踪服务器端给客户端创建的cookie
    #创建一个session对象
session = requests.Session() #空白的session对象

first_url = 'https://xueqiu.com/'
#使用session对象进行请求发送:如果该次请求时,服务器端给客户端创建cookie的话,则该cookie就会被保存seesion对象中
session.get(url=first_url,headers=headers)
#使用保存了cookie的session对象进行后续请求发送
ret = session.get(url=url,headers=headers,params=param).json()
print(ret)

模拟登录

获取https://passport.17k.com/中的书架页面里的图书信息

代码:

import requests
from lxml import etree

headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
}

login_url = 'https://passport.17k.com/ck/user/login'
data = {
    "loginName": "15027900535",
    "password": "xxxxxxxxx"
}
session = requests.Session()
#请求的目的是为了获取cookie将其保存到session对象中
session.post(url=login_url,headers=headers,data=data)

#携带cookie向书架的页面进行请求发送,获取书架信息
#书架中的数据是动态加载的数据
book_url = 'https://user.17k.com/ck/author2/shelf?page=1&appKey=2406394919'
page_text = session.get(url=book_url,headers=headers).json()

#解析书架信息
print(page_text)

代理

什么是代理
    代理服务器
代理服务器的作用
    就是用来转发请求和响应

【爬虫&APP逆向003】视频数据爬取&Cookie&代理_爬虫

在爬虫中为何需要使用代理?
    有些时候,需要对网站服务器发起高频的请求,网站的服务器会检测到这样的异常现象,则会讲请求对应机器的ip地址加入黑名单,则该ip再次发起的请求,网站服务器就不在受理,则我们就无法再次爬取该网站的数据。
    使用代理后,网站服务器接收到的请求,最终是由代理服务器发起,网站服务器通过请求获取的ip就是代理服务器的ip,并不是我们客户端本身的ip。
代理的匿名度
    透明:网站的服务器知道你使用了代理,也知道你的真实ip
    匿名:网站服务器知道你使用了代理,但是无法获知你真实的ip
    高匿:网站服务器不知道你使用了代理,也不知道你的真实ip(推荐)
代理的类型(重要)
    http:该类型的代理服务器只可以转发http协议的请求
    https:可以转发https协议的请求
如何获取代理?
    芝麻代理:https://jahttp.zhimaruanjian.com/(推荐,有新人福利)

【爬虫&APP逆向003】视频数据爬取&Cookie&代理_爬虫_02

如何使用代理?

测试:访问如下网址,返回自己本机ip
    这个代码可以测试自己的ip地址

代码:

import requests
from lxml import etree
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
url = 'http://www.cip.cc/'

page_text = requests.get(url,headers=headers).text
tree = etree.HTML(page_text)
text = tree.xpath('/html/body/div/div/div[3]/pre/text()')[0]
print(text.split('\n')[0])

现在使用代理服务器,测试一下是不是能返回代理服务器的地址
代码

import requests
from lxml import etree
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
url = 'http://www.cip.cc/'

page_text = requests.get(url,headers=headers,proxies={'http':'121.234.12.62:4246'}).text
# proxies 是一个字典:key是协议类型,值是ip+端口
tree = etree.HTML(page_text)
text = tree.xpath('/html/body/div/div/div[3]/pre/text()')[0]
print(text.split('\n')[0])  # 结果返回:121.234.12.62

# 这时应该返回的是代理服务器的地址,上面使用的是一个代理服务器

深度测试:
案例:https://www.kuaidaili.com/free/inha(当多次对这个网站发请求的话,这个网站会被封掉)
对快代理这个网站进行n次请求,直到本机无法访问快代理为止(证明本机ip被快代理封掉了)
构建一个代理池(封装了很多代理ip和端口的容器),用于数据的批量爬取

import requests
from lxml import etree
import random
import time
import random

headers = {
	'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}

# 构建一个代理池(有很多不同的代理服务器)
# 芝麻代理:https://jahttp.zhimaruanjian.com/
proxy_url = 'http://webapi.http.zhimacangku.com/getip?num=80&type=3&pro=&city=0&yys=0&port=11&pack=337730&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=1®ions='
page_text = requests.get(url=proxy_url, headers=headers).text
proxy_list = []  # 代理池   数据格式:[{},{},{}]
for ips in page_text.split('\n')[0:-1]:
	dic = {}
	dic['https'] = ips.strip()
	proxy_list.append(dic)

for page in range(1, 5001):
	print('正在爬取第%d页的ip数据......' % page)
	# 生成不同页码对应的url
	url = 'https://www.kuaidaili.com/free/inha/%d/' % page
	page_text = requests.get(url=url, headers=headers, proxies=random.choice(proxy_list)).text
	time.sleep(0.5)
	tree = etree.HTML(page_text)
	ip = tree.xpath('//*[@id="list"]/div[1]/table/tbody/tr[1]/td[1]/text()')[0]
	print(ip)


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
jersHK05me2f