2014-02-21 2 views
1

Теперь я использую iMacros для извлечения данных из сети и заполнения форм, представляющих данные.Могу ли я заполнять веб-формы Scrapy?

Но iMacros - дорогой инструмент. Мне нужна бесплатная библиотека, и я читал о Scrapy для сбора данных. Я более сложный для программирования, но правила денег.

Вопрос в том, могу ли я заполнить html-формы с помощью Scrapy и отправить на веб-страницу. Я не хочу использовать Javascript, я хочу использовать исключительно скрипты Python.

Я искал в http://doc.scrapy.org/, но ничего не нашел о форме-submit.

+0

Это веб-скребок, а не библиотеку веб-запросов. На самом деле получил эту ссылку из другого вопроса здесь, на SO только 5 минут назад .. try: http://requests.readthedocs.org/en/latest/ – Torxed

+0

Спасибо, я посмотрю на это. Веб-форма использует метод POST, и мне также нужно загружать файлы. – Trimax

+0

Не имеет значения. Все еще не может сделать это с помощью scrapy: P Каждая другая библиотека, которая не используется для очистки, может быть такой: – Torxed

ответ

0

Mechanize - это библиотека python, которая позволяет автоматизировать взаимодействие с веб-сайтом. Он поддерживает заполнение формы HTML.

+0

Мне нужна поддержка Python 3. Я пытаюсь с [Запросами] (http://requests.readthedocs.org/en/latest/) – Trimax

+0

Просто используйте scrapy, как предложил surfer190. или ... попробуйте Selenium (безголовый с драйвером HTMLUNIT) – TheyDontHaveIT

-1

Ниже программа объясняет, как заполнить форму:

import mechanize 
import cookielib 
from BeautifulSoup import BeautifulSoup 
import html2text 
# Browser 
br = mechanize.Brenter code hereowser() 

# Cookie Jar 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 

# Browser options 
br.set_handle_equiv(True) 
br.set_handle_gzip(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 

# Follows refresh 0 but not hangs on refresh > 0 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 

# User-Agent (this is cheating, ok?) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 

# The site we will navigate into, handling it's session 
br.open('http://gmail.com') 

# Select the first (index zero) form 
br.select_form(nr=0) 

# User credentials 
br.form['Email'] = 'user' 
br.form['Passwd'] = 'password' 
# Login 
br.submit() 

# Filter all links to mail messages in the inbox 
all_msg_links = [l for l in br.links(url_regex='\?v=c&th=')] 
# Select the first 3 messages 
for msg_link in all_msg_links[0:3]: 
    print msg_link 
    # Open each message 
    br.follow_link(msg_link) 
    html = br.response().read() 
    soup = BeautifulSoup(html) 
    # Filter html to only show the message content 
    msg = str(soup.findAll('div', attrs={'class': 'msg'})[0]) 
    # Show raw message content 
    print msg 
    # Convert html to text, easier to read but can fail if you have intl 
    # chars 
# print html2text.html2text(msg) 
    print 
    # Go back to the Inbox 
    br.follow_link(text='Inbox') 

# Logout 
br.follow_link(text='Sign out') 
Смежные вопросы