Python之模拟登录微博下载视频

最近看到很多博主下载资源,其中有人就问:我们是搞程序出生的,能不能写段代码来实现微博下载视频资源呢?

当然,可以了,下面我使用python,来做一下演示。

1.借助JavaScript将页面滚动到最底部

def scroll(driver):
    driver.execute_script("""
        (function () {
            var y = document.body.scrollTop;
            var step = 100;
            window.scroll(0, y);
            function f() {
                if (y < document.body.scrollHeight) {
                    y += step;
                    window.scroll(0, y);
                    setTimeout(f, 50);
                }
                else {
                    window.scroll(0, y);
                    document.title += "scroll-done";
                }
            }
            setTimeout(f, 1000);
        })();
        """)

2.登录代码

from selenium import webdriver
import time
driver = webdriver.PhantomJS(executable_path=r'D:\phantomjs\bin\phantomjs.exe')
driver.set_window_size(1124, 850)#如果不设置窗口大小,send_keys()会报错
driver.get('https://weibo.com/login.php')
driver.find_element_by_id('loginname').send_keys('*********@qq.com')#输入用户名
driver.find_element_by_name('password').send_keys('********')#输入密码
driver.find_element_by_css_selector('.W_btn_a.btn_32px').click()

3.等待浏览器加载JavaScript,如果出现了“加载更多微博”则单击该链接

driver.get('http://www.weibo.com/u/2479183364/home?wvr=5&c=spr_sinamkt_buy_hyww_weibo_t112')#模拟登录成功之后需要手动转到用户主页,否则用户主页中的js不会加载
for i in range(100):
    scroll(driver)
    time.sleep(2) #等待浏览器加载JavaScript
    print(i)
    try: #如果出现了“加载更多微博”则单击该链接
        check = driver.find_element_by_css_selector('.more_txt.W_f14')
        check.click()
    except:
        pass
html = driver.page_source
with open('sourcepage.html','wb') as f:
    f.write(html.encode('utf-8'))

4.分析网页代码并下载视频,具体代码如下:

f = open('sourcepage.html','r',encoding='utf-8')
def Schedule(a,b,c):
    '''''
    a:已经下载的数据块
    b:数据块的大小
    c:远程文件的大小
    '''
    per = 100.0 * a * b / c
    if per > 100 :
        per = 100
    print('%.2f%%' % per,'已完成:',a*b,'文件大小:',c)
import re
import urllib.request

5.视频地址保存在如下字符串中:video_src=%2F%2Ff.us.sinaimg.cn%2F003VadS9lx07dFILBptK010f010027cR0k01.mp4

src_list = re.findall(r'video_src=(.+?\.mp4)',f.read())#提取地址
for i in range(len(src_list)):
    src_list[i] = re.sub(r'%2F','/',src_list[i])
    try:#部分视频无法访问,会抛出403错误
        urllib.request.urlretrieve('http:'+src_list[i],"D:/Book/大型实例/Weibo"+re.sub(r'/','',src_list[i]),Schedule)
    except Exception as e:
        print(e)

OK,先写到这了,下次再写了!呵呵~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Robin&li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值