首页 > 解决方案 > python beautifulsoup href 打印为 #

问题描述

当我尝试为 .zip 文件提取特定的 href 时,返回的只是 #

我已经剥离了我的脚本,所以只剩下棘手的部分。当我在不使用 opener.open 的情况下使用测试 html(它是目标站点的副本)运行脚本时,它工作正常。当我在实际站点上运行它时,我只收到#。

任何帮助将不胜感激。

#!usr/bin/env python3

from bs4 import BeautifulSoup
import urllib.request

class Opener(urllib.request.FancyURLopener):
    version = "Mozilla/5.0"

opener = Opener()

test = '<a id="dlbutton" href="https://www55.zippyshare.com/d/H7prSkjz/2176/Barrier%20Line%20Riddim%20-%20%20J.%20Small%20Records.zip"><div class="download"></div></a>'

dstar = 'https://www55.zippyshare.com/v/H7prSkjz/file.html'

def grabzip(url):
    link = BeautifulSoup(opener.open(url), "html.parser")
    for ziplink in link.find_all('a', id="dlbutton"):
       print(ziplink.get('href'))

grabzip(dstar)

标签: pythonbeautifulsouppython-requestsurllib

解决方案


您可以使用 Selenium/ Chromedriver动态导航站点并获取 href:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()  
chrome_options.add_argument("--headless")  
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www55.zippyshare.com/v/H7prSkjz/file.html")

print(driver.find_element_by_id("dlbutton").get_attribute("href"))

输出

https://www55.zippyshare.com/d/H7prSkjz/16761/Barrier%20Line%20Riddim%20-%20%20J.%20Small%20Records.zip

推荐阅读