Отправка веб-формы с использованием python

18

Я видел такие вопросы, которые задавали много раз, но никто не помогает

Я пытаюсь отправить данные в форму на веб-проверенных запросах, а urllib и никто не работал

, например, здесь находится код, который должен искать тег [python] на SO:

import urllib
import urllib2

url = 'http://stackoverflow.com/'

# Prepare the data
values = {'q' : '[python]'}
data = urllib.urlencode(values)

# Send HTTP POST request
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)

html = response.read()

# Print the result
print html

пока я запускаю его, я получаю html-адрес домашней страницы

вот пример использования запросов:

import requests

data= {
    'q': '[python]'
    }
r = requests.get('http://stackoverflow.com', data=data)

print r.text

тот же результат! Я не понимаю, почему эти методы не работают, я пробовал их на разных сайтах без успеха, поэтому, если кто-то успешно это сделал, пожалуйста, покажи мне, как!

Большое спасибо!     

задан Serial 07.07.2013 в 07:41
источник
  • Звучит как работа для механизации-питона! –  Johnsyweb 07.07.2013 в 07:43
  • , да, плохо проверьте это, но я все еще удивляюсь, почему они не работают !? –  Serial 07.07.2013 в 07:44

3 ответа

20

Если вы хотите передать q в качестве параметра в URL-адресе, используя requests , используйте params аргумент, а не data (см. Передача параметров в URL-адресах ):

r = requests.get('http://stackoverflow.com', params=data)

Это потребует Ссылка , которая не является тем, что вы ищете.

Вы действительно хотите POST в форме . Попробуйте следующее:

r = requests.post('https://stackoverflow.com/search', data=data)

Это по существу то же самое, что GET -ting Ссылка , но я думаю вы получите эту идею.

    
ответ дан Johnsyweb 07.07.2013 в 08:40
источник
  • wow, который на самом деле работал, я пробовал alot bu, я не знал, почему я не смог получить его благодаря! –  Serial 07.07.2013 в 12:29
  • Работал для меня. благодаря –  MegaBytes 01.02.2016 в 11:22
9
import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
      'location' : 'Northampton',
      'language' : 'Python' }

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req) 
the_page = response.read()

Это делает запрос POST с данными, указанными в значениях. нам нужно urllib для кодирования url, а затем urllib2 для отправки запроса.

    
ответ дан Rashid Feroz 21.01.2015 в 20:30
источник
  • Это точно такое же, как у op ... –  KindaTechy 03.05.2017 в 08:06
0

Механизируйте библиотеку из python также отлично, позволяя вам даже отправлять формы. Вы можете использовать следующий код для создания объекта браузера и создания запросов.

import mechanize,re
br = mechanize.Browser()
br.set_handle_robots(False)   # ignore robots
br.set_handle_refresh(False)  # can sometimes hang without this
br.addheaders = [('User-agent', 'Firefox')]             
br.open( "http://google.com" )
br.select_form( 'f' )
br.form[ 'q' ] = 'foo'
br.submit()
resp = None

for link in br.links():
    siteMatch = re.compile( 'www.foofighters.com' ).search( link.url )

    if siteMatch:
        resp = br.follow_link( link )
        break

content = resp.get_data()
print content
    
ответ дан Harsh Gupta 15.07.2017 в 13:34
источник