Когда вы публикуете сообщение, это делается с помощью запроса POST
, который отправляется на сервер.Посмотрите код на вашем сайте:
<form action="enter.php" method="post">
<textarea name="post">Enter text here</textarea>
</form>
Вы собираетесь отправить запрос POST
с параметром post
(IMO с плохим именем объекта), который является вашим текстом.
Что касается сайта, который вы захватываете, если вы посмотрите на исходный код, Pi на самом деле находится внутри <iframe>
с этим URL:
http://www.piday.org/includes/pi_to_1million_digits_v2.html
Глядя на , что Исходный код, вы можете видеть, что страница представляет собой просто один тег <p>
, непосредственно идущий от тега <body>
(на сайте нет <!DOCTYPE>
, но я добавлю его):
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
<p>3.1415926535897932384...</p>
</body>
</html>
Поскольку HTML является формой XML, вам потребуется использовать анализатор XML для анализа веб-страницы.Я использую BeautifulSoup , так как он работает очень хорошо с искаженным или недействительным XML, но еще лучше с совершенно корректным HTML.
Для загрузки реальной страницы, которую вы бы хотелиПодача в парсер XML, вы можете использовать встроенный в Python urllib2
.Для запроса POST
я бы использовал стандартный Python httplib
.
. Вот полный пример:
import urllib, httplib
from BeautifulSoup import BeautifulSoup
# Downloads and parses the webpage with Pi
page = urllib.urlopen('http://www.piday.org/includes/pi_to_1million_digits_v2.html')
soup = BeautifulSoup(page)
# Extracts the Pi. There's only one <p> tag, so just select the first one
pi_list = soup.findAll('p')[0].contents
pi = ''.join(str(s).replace('\n', '') for s in pi_list).replace('<br />', '')
# Creates the POST request's body. Still bad object naming on the creator's part...
parameters = urllib.urlencode({'post': pi,
'name': 'spammer',
'post_type': 'confession',
'school': 'all'})
# Crafts the POST request's header.
headers = {'Content-type': 'application/x-www-form-urlencoded',
'Accept': 'text/plain'}
# Creates the connection to the website
connection = httplib.HTTPConnection('freelove-forum.com:80')
connection.request('POST', '/enter.php', parameters, headers)
# Sends it out and gets the response
response = connection.getresponse()
print response.status, response.reason
# Finishes the connections
data = response.read()
connection.close()
Но если выиспользуя это в злонамеренных целях, знайте, что сервер регистрирует все IP-адреса.