1

저는 지금이 벽에 대해 몇 일간 머리를 부러 뜨렸으므로 SO 커뮤니티에 물어볼 것이라고 생각했습니다. 나는 파이썬 스크립트를 원한다. 다른 것들 중에서도 파일을 다운로드하기 위해 웹 사이트의 양식에있는 '승인'버튼을 누를 수 있어야한다. 이를 위해 양식에 대한 액세스 권한이 필요합니다.Python - 특정 div에 액세스 할 수 없습니다. [Urllib, BeautifulSoup, 아마도 Mechanize?]

This is an example of the kind of file I want to download. 나는 그 안에 용어를 수락하고 파일을 다운로드 할 수있는 이름없는 양식이 있다는 것을 알고 있습니다. 또한 양식이 발견 될 수있는 div가 주 콘텐츠 div라는 것을 알고 있습니다.

그러나 BeautifulSoup이 웹 페이지를 구문 분석 할 때마다 주 콘텐츠 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를 반복하려고 시도하는 루프입니다. 첫 번째 코드 비트 (첫 번째 루프)는 다른 경우 다운로드 링크를 가져 오는 코드입니다 (스크립트가 제공된 URL은 콘텐츠 형식이있는 .zip과 같은 파일 확장명으로 표시된 '다운로드 링크'입니다) text/html)을 무시하십시오. 나는 단지 상황에 맞게 추가했다.

내가 충분히 확신하지는 않지만 충분한 세부 정보를 제공했으면 좋겠다. 내가하고있는 일에 대해 더 자세한 정보가 필요하면 알려주세요. 나는 기꺼이 행복해 할 것입니다. 고마워, 스택.

답변

1

여기 main-content 사업부와 형태 조치를 얻기위한 코드입니다 :

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에 대한 예를 제공 기계화 또는 셀레늄 수 있습니다.

희망이 있습니다.

+0

이것은 실행 가능해야합니다! 고맙습니다. 처음이 솔루션을 시도했을 때, None을 반환하고 내 머리를 조금 긁어 보았습니다. 나는 그 문제를 당신에게 줄였습니다. 그러나 제 스크립트의 다른 부분에서, URL을 얻을 때 필요한 정확한 URL을 전달하지 않을 것입니다. 내 문제와 제가 가지고있는 것을 모르는 문제 모두를 도와 주셔서 감사합니다! 감사합니다. – Magoo111