1

私はここ数日間、この壁に頭を悩ませてきたので、SO コミュニティに聞いてみようと思いました。ファイルをダウンロードするために、とりわけ、Web サイトのフォームの「同意」ボタンを押すことができる Python スクリプトが必要です。ただし、そのためには、フォームにアクセスする必要があります。

これは、ダウンロードしたいファイルの例です。その中に、条件に同意してファイルをダウンロードするアクションを含む名前のないフォームがあることを知っています。また、フォームを見つけることができる div がメイン コンテンツ div であることも知っています。

ただし、BeautifulSoup が Web ページを解析するたびに、メイン コンテンツの 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 の形式でダウンロードしたいファイルの種類ですが、それは私の質問にはあまり関係ありません。関連するコードは 2 番目の 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 に答える