1

几天来,我一直在撞墙,所以我想我会问 SO 社区。我想要一个 python 脚本,除其他外,它可以点击网站表单上的“接受”按钮以下载文件。不过,为此,我需要访问该表单。

这是我要下载的文件类型的示例。我知道其中有一个未命名的表单,其中包含接受条款和下载文件的操作。我也知道可以在其中找到表单的 div 是 main-content div。

但是,每当我用 BeautifulSoup 解析网页时,我都无法获取 main-content div。我设法获得的最接近的是它之前的 main_content 链接,它没有通过 BeautifulSoup 的对象为我提供任何信息。

这是我脚本中的一些代码:

web_soup = soup(urllib2.urlopen(url))
parsed = list(urlparse(url))
ext = extr[1:]
for downloadable in web_soup.findAll("a"):
  encode = unicodedata.normalize('NFKD',downloadable.text).encode('UTF-8','ignore')
  if ext in str.lower(encode):
    if downloadable['href'] in url:
      return ("http://%s%s" % (parsed[1],downloadable['href']))
for div in web_soup.findAll("div"):
  if div.has_key('class'):
    print(div['class'])
    if div['class'] == "main-content":
      print("Yep")
return False

Url 是我正在查看的 url 的名称(所以是我之前发布的 url)。extr 是我希望以 .extension 形式下载的文件类型,但这与我的问题并不真正相关。相关的代码是第二个 for 循环,我试图在其中循环遍历 div。第一段代码(第一个 for 循环)是在另一种情况下用于获取下载链接的代码(当给定脚本的 url 是由文件扩展名标记的“下载链接”时,例如带有内容类型的 .zip text/html),所以请随意忽略它。我添加它只是为了上下文。

我希望我提供了足够的细节,尽管我确信我没有。如果您需要有关我正在做什么的更多信息,请告诉我,我很乐意提供帮助。谢谢,堆栈。

4

1 回答 1

1

下面是获取main-contentdiv 和 form 动作的代码:

import re
import urllib2
from bs4 import BeautifulSoup as soup


url = "http://www.cms.gov/apps/ama/license.asp?file=/McrPartBDrugAvgSalesPrice/downloads/Apr-13-ASP-Pricing-file.zip"
web_soup = soup(urllib2.urlopen(url))

# get main-content div
main_div = web_soup.find(name="div", attrs={'class': 'main-content'})
print main_div

# get form action
form = web_soup.find(name="form", attrs={'action': re.compile('.*\.zip.*')})
print form['action']

不过,如果您需要,我可以提供 lxml、mechanize 或 selenium 的示例。

希望有帮助。

于 2013-05-21T17:15:46.083 回答