paramatton 2021-01-22 23:38 采纳率: 0%
浏览 28

想从用urlretrieve下载mp3,但是每次都被跳转另一个mp3?

我写了简单程序 想从http://www.ting89.com/下载mp3

_opener = urllib.request.build_opener()
_opener.addheaders = [("User-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko")]

url = urllib.parse.quote(_url_link, safe='/:?=')
try:
    _opener.open(url)
    
    urlretrieve(url, _path_local, cbk)

    
except Exception as e:
    print(e)

结果每次都只能下载一个网站自己的mp3,手动下载可以下载真正的mp3,是被反爬虫了吗?

  • 写回答

1条回答 默认 最新

  • slience_me 人工智能领域新星创作者 2024-01-11 14:17
    关注

    你的问题可能是由于网站对爬虫采取了一些反爬虫机制。这些机制可能包括检测用户代理(User-Agent)、设置 cookie、JavaScript 渲染等。你已经设置了一个基本的用户代理,但仍然可能需要更多的处理。

    以下是一些可能帮助你解决问题的方法:

    1. 设置更真实的用户代理: 有些网站可能只接受特定浏览器的请求。你可以尝试使用真实浏览器的用户代理,例如 Chrome 或 Firefox。

      _opener.addheaders = [("User-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")]
      
    2. 处理 JavaScript 渲染: 如果网站使用了 JavaScript 动态加载内容,urllib 可能无法执行 JavaScript,导致无法获取到真正的下载链接。考虑使用带有 JavaScript 渲染功能的库,如 selenium,来模拟浏览器行为。

      from selenium import webdriver
      
      # 创建一个模拟浏览器
      driver = webdriver.Chrome()
      
      # 使用模拟浏览器打开网页
      driver.get(_url_link)
      
      # 获取真正的下载链接
      real_download_link = driver.find_element_by_xpath("your_xpath_expression").get_attribute("href")
      
      # 关闭模拟浏览器
      driver.quit()
      
    3. 处理重定向: 有时,网站会通过重定向将你导向其他链接。你可以使用库中的函数来获取最终的重定向链接,然后再进行下载。

      import requests
      
      response = requests.get(_url_link, allow_redirects=False)
      real_download_link = response.headers['Location']
      

    请注意,爬取网站内容时,请遵守该网站的使用条款和规定。如果网站有robots.txt文件,请遵循其中的规定。非法的爬取行为可能导致你被封禁或面临法律责任。

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况