【问题标题】:Python webpage scraping select drop-down menuPython网页抓取选择下拉菜单
【发布时间】:2018-04-14 16:08:35
【问题描述】:

我正在尝试抓取此网页:http://animeheaven.eu/watch.php?a=My%20Hero%20Academia%203&e=2 并下载视频。如您所见,它加载了 720p 视频。我可以从这里下载视频。但我不知道如何从下拉菜单中获取其他视频版本,即 480p 版本。如何选择 480p 链接?

【问题讨论】:

  • 显示到目前为止你在这个问题上做了什么?
  • 好吧,我对下载部分也不是很满意,但这让我的工作完成了。我注意到javascript函数永远不会只改变变量,所以我在python中硬编码函数并每次都获取变量,基本上,我没有渲染js,而是编写了一个python等效的输出下载链接,因为js渲染很慢

标签: javascript python selenium beautifulsoup


【解决方案1】:

如果您使用参数 "rs" = "1" 发出 POST 请求,您将获得所需的数据。

from bs4 import BeautifulSoup
import requests

link = "http://animeheaven.eu/watch.php?a=My%20Hero%20Academia%203&e=2"
html= requests.post(link, data = {'rs': '1'})
soup= BeautifulSoup(html.content,"lxml")

scripts= soup.findAll("script")
sc=scripts[4]
print (sc)
...

输出:

...
document.write("<a  class='an' href='"+ pli +"'><div class='dl2'>Download  159 MB</div></a>");
...

不是:

...
document.write("<a  class='an' href='"+ pli +"'><div class='dl2'>Download  255 MB</div></a>");
...

已更新以回应评论:

...
select = soup.find("select", {'name': 'rs'})
for option in select.find_all('option'):
    print ("{} = {}".format(option.text, option['value']))

输出

720p = 0
480p = 1

【讨论】:

  • 所以rs 将提供分辨率,sr 将提供服务器。有没有办法知道rs 的可用数字,我的意思是 0 或 1 或 2 等?
  • 在 FireFox 或 Chrome 中使用检查,查看网络选项卡并提交表单,然后查看发送的数据,这将告诉您需要使用的相应值。
  • 我的意思是在代码中没有打开浏览器。例如我也可以从页面源中看到可用的分辨率,所以我想我可以获取页面源,读取可用的分辨率,然后再次使用适当的 rs 数据发送请求
  • 我放了一些代码来更新我的答案。
猜你喜欢
  • 2019-04-05
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 2023-03-25
  • 2022-11-11
  • 2017-05-10
相关资源
最近更新 更多