首页 > 技术文章 > 编写脚本,批量下载“明朝那些事-有声书”,问题总结

cxhiano-tech-share 2021-01-02 09:29 原文

问题1:requests.post(url)返回405错误

解决方法转载于:https://blog.csdn.net/qq505525372/article/details/8461209,问题有效解决

核心就是使用get方法:requests.get(url)

 

问题2:使用get方法成功获取网页之后,中文是乱码怎么办?

解决办法转载于:https://jingyan.baidu.com/article/915fc4145b5f5d51394b20c8.html,参考了以上网址中的方法,但是出现了新的问题:

 

解决办法转载于以下网址:https://blog.csdn.net/qingyuanluofeng/article/details/46514119,即如下编写代码

print ((r.text.encode(r.encoding).decode('gbk'))),成功搞定

 

最终发现selenium是正解:

先描述一下需求:批量下载一个网站上的第一集,第二集....到第322集MP3;手工点击分为两步骤,点击第几集,点击下载线路

import os
from selenium import webdriver
import time

chromedriver = "F:/chromedriver_win32/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)


def download_batch():
    for i in range(25, 322):
### 先分析了一下网页源代码,发现命名有规律可循,这里需要考察命名规律的原因是同一页面有“同名,但是功能不同的按钮”
### 这里也可以使用tag先定位,然后使用get_attibute的方法得到url,然后跳转访问 driver.get(
"网站名{i}.html".format(i=i))
     ### 这里多了一层iframe, 需要先定位iframe,然后得到调准的src,然后跳过去,找下载线路 src
= driver.find_elements_by_tag_name("iframe")[1].get_attribute("src") driver.get(src) try: driver.find_element_by_link_text("本地1线").click()
       ###下载等待,这里设置了5分钟,即300s time.sleep(
300) except: continue download_batch()

 

 

 

 

 

推荐阅读