Python spider (三) Ajax抓包下载视频

本文介绍了一种爬取梨视频网站视频数据的方法,包括构造请求头、解析网页内容、发送AJAX请求、处理JSON响应及多线程下载等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抓包的过程中,有一个很重要的信息,UA伪装,所有的请求头都需要我们注意,不可以遗漏信息

1.获取视频电影数据

  • 首页

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
}
    home_url = 'https://www.pearvideo.com/category_5'
    #首页的page_text
    home_page = requests.get(url=home_url,headers=headers).content
    # 抓取初始界面
    home_tree = etree.HTML(home_page)
    # 视频下载地址
    all_of_video_url = home_tree.xpath('//*[@id="listvideoListUl"]/li[@class="categoryem "]')
  • 详情页
 for li in all_of_video_url:
        v_name = li.xpath('./div/a/div[2]/text()')[0] + '.mp4'
        # 详情页界面
        v_url = 'https://www.pearvideo.com/' + li.xpath('//div[@class="vervideo-bd"]/a/@href')[0] 
        v_page_text = requests.get(url=v_url,headers=headers).content
        # 解析详情页
        v_tree = etree.HTML(v_page_text)
  • ajax视频请求:

在这里插入图片描述

但是我们在请求的时候,发现并没什么用,显示文章已下线了,这是因为我们直接对其发出请求,所以会导致请求是无效的,因为不知道来源
在这里插入图片描述

  • 手动发送请求
        ajax_url = 'https://www.pearvideo.com/videoStatus.jsp?'
        ajax_id = str(v_tree.xpath('//div[@class="video-tt-box"]//div[@class="fav"]/@data-id')[0])
        # ajax请求头
        ajax_headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
            'Referer': 'https://www.pearvideo.com/video_' + ajax_id
        }
        ajax_param = {
            'contId': ajax_id,
            'mrd': str(random.random())
        }
        # print(f'{ajax_headers["Referer"]},{ajax_headers["User-Agent"]},{ajax_url}')

        ajax_json = requests.get(url=ajax_url,headers=ajax_headers,params=ajax_param).json()
        # 根据json串 使用正则表达式来解析出来src地址
        vitual_url = ajax_json["videoInfo"]["videos"]["srcUrl"]

        # 真实地址
        # https://video.pearvideo.com/mp4/short[xxxxx]/20220324/cont-1756292-10023871-230424-hd.mp4
        print(vitual_url)
        # 虚假地址
        # https://video.pearvideo.com/mp4/third/20220324/1648264378624-10023871-230424-hd.mp4
        # 替换
        # 网址确实是会被替换。所以扩大范围
        ex = '.*?/\w{5}/{1}\d{8}/(.*?)-'
        word = re.findall(ex, vitual_url, re.S)[0]
        v_real_url  = re.sub(word, 'cont-' + ajax_id, vitual_url)
        dic = {
            'name': v_name,
            'url': v_real_url
        }
        load_urls.append(dic)
  • 使用连接池多线程请求:
def get_video(dic):
    v_url = dic['url']
    v_name = dic['name']
    print(v_name,'正在下载\n')
    v_content = requests.get(url=v_url,headers=headers).content
    v_paht = './videoCollection/' + v_name
    with open(v_paht,'wb') as fp:
        fp.write(v_content)
        print(v_name,'下载完成\n')

pool = Pool(4)
pool.map(get_video,load_urls)
pool.close()
  • 下载完毕

在这里插入图片描述

### 使用 Scrapy 爬取淘宝商品评论数据 为了使用 Python 的 Scrapy 框架爬取淘宝商品评论数据,需遵循一系列特定的操作流程。首先,创建一个新的 Scrapy 项目并定义目标 URL 和解析逻辑。 #### 创建 Scrapy 项目 初始化新的 Scrapy 项目可以通过命令行工具完成: ```bash scrapy startproject taobao_reviews ``` 这会建立一个名为 `taobao_reviews` 的目录结构,在其中包含所有必要的配置文件和模板[^2]。 #### 定义 Spider 类 在 Spiders 文件夹下新建 Python 脚本用于编写具体的抓取逻辑。对于淘宝评论而言,通常需要处理分页加载以及 AJAX 请求等问题。因此,Spider 需要能够模拟浏览器行为发送请求,并解析返回的数据。 ```python import scrapy from ..items import TaobaoReviewsItem class ReviewSpider(scrapy.Spider): name = 'review_spider' allowed_domains = ['item.taobao.com'] def __init__(self, product_id=None, *args, **kwargs): super().__init__(*args, **kwargs) self.start_urls = [ f'https://rate.tmall.com/list_detail_rate.htm?itemId={product_id}&amp;currentPage=1' ] def parse(self, response): item = TaobaoReviewsItem() # 解析页面上的评论信息 reviews = response.css('.tm-rate-content') for review in reviews: content = review.xpath('./div[@class="tm-rate-fulltxt"]/text()').get().strip() date = review.css('.tm-rate-date::text').get() yield { 'content': content, 'date': date } next_page_url = response.css('a.ui-page-next::attr(href)').extract_first() if next_page_url is not None: absolute_next_page_url = response.urljoin(next_page_url) yield scrapy.Request(url=absolute_next_page_url, callback=self.parse) ``` 此代码片段展示了如何构建一个简单的 Spider 来提取每条评论的内容及其发表日期。注意这里假设评论是以 HTML 形式呈现;如果实际 API 返回 JSON 数据,则应相应调整解析方式[^3]。 #### 设置 Item Pipeline 为了让抓到的信息得以保存至本地或其他数据库中,还需要设置 Items 及 Pipelines。编辑 items.py 添加字段描述所需存储的数据项,并修改 settings.py 开启 pipeline 功能。 ```python # In items.py import scrapy class TaobaoReviewsItem(scrapy.Item): content = scrapy.Field() date = scrapy.Field() ``` 最后一步是在 pipelines.py 中实现具体存盘逻辑,比如将结果写入 CSV 或者连接 MySQL 存储等操作[^4]。 #### 运行爬虫程序 当一切准备就绪之后,就可以执行如下指令启动爬虫了: ```bash scrapy crawl review_spider -a product_id=<your_product_id> ``` 上述命令中的 `-a product_id=` 参数用来传递给 Spider 实例化时所需的参数值,即指定想要抓取哪个产品的 ID 编号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值