下面是我使用的代码
for link in f:
r = requests.get(link,verify=True)
soup = BeautifulSoup(r.content,'html5lib')
soup.encode('utf-8')
table = soup.find('div',attrs={'class':'right'})
print(table.div.a)
download = table.div.a['href']
在这里,我没有得到下载链接,而是得到了一个"#">
我正在抓取的链接:https://www54.zippyshare.com/v/2Mu2T2KI/file.html
期望输出:
/d/2qeYvgEb/29682/Horizon%20-%20Zero%20Dawn%20CE%20--%20fitgirl-repacks.site%20--.part01.rar
- 输出获取:
#
问题是链接在原始html中不存在,但它使用js脚本进行了更改。为了能够找到链接,你需要让js运行。我认为使用bs4
是不可能的。
另一种方法是使用requests-html
:
from requests_html import HTMLSession
session = HTMLSession()
root = 'https://www54.zippyshare.com'
link = 'https://www54.zippyshare.com/v/2Mu2T2KI/file.html'
r = session.get(link)
r.html.render() # this will load js
download_link = root + r.html.find('.right', first=True).find('a', first=True).attrs['href']
注意,我使用了一个css选择器.right
;这与class
:right
相同,尽管后者在requests-html
上不受支持。first=True
参数的作用与在bs4
中使用find
而不是find_all
相同。
此处,所有链接都将显示在此站点中
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = "https://www54.zippyshare.com/v/2Mu2T2KI/file.html"
r = requests.get(url)
htmlcontent = r.content
soup = BeautifulSoup(htmlcontent,'html.parser')
#print(soup.prettify)
df = soup.find_all("a")
for data in df:
dx = data.get('href')
if dx != "#":
print(dx)
希望它能帮助您