Python - не может получить доступ к определенному div [Urllib, BeautifulSoup, может быть Mechanize?]

Я уже пару дней ломаю голову об эту стену, поэтому я решил спросить у SO сообщества. Мне нужен скрипт на python, который, помимо прочего, может нажимать кнопки "принять" на формах на веб-сайтах для загрузки файлов. Однако для этого мне нужно получить доступ к форме.

Это пример файла, который я хочу скачать. Я знаю, что внутри него есть безымянная форма с действием для принятия условий и загрузки файла. Я также знаю, что 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. Первый фрагмент кода (первый цикл for) - это код, который перехватывает ссылки на скачивание в другом случае (когда URL-адрес, который задает скрипт, является "ссылкой для скачивания", отмеченной расширением файла, например.zip с типом содержимого). текста / HTML), так что не стесняйтесь игнорировать его. Я добавил это только для контекста.

Я надеюсь, что предоставил достаточно деталей, хотя я уверен, что не сделал. Дайте мне знать, если вам нужно больше информации о том, что я делаю, и я буду рад сделать это. Спасибо, Стек.

1 ответ

Решение

Вот код для получения main-content div и форма действия:

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, механизации или селена.

Надеюсь, это поможет.

Другие вопросы по тегам