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, механизации или селена.
Надеюсь, это поможет.