Как создать скрипт Python, который захватывает текст с одного сайта и размещает его на другом? - PullRequest
3 голосов
/ 24 мая 2011

Я хотел бы создать скрипт Python, который собирает цифры Pi с этого сайта: http://www.piday.org/million.php и перепостить их на этот сайт: http://www.freelove -forum.com / index.php Я НЕ спамую и не разыгрываю, это шутка с создателем и веб-мастером, запоздалое празднование Дня Пи, если хотите.

Ответы [ 3 ]

1 голос
/ 24 мая 2011

Импорт urllib2 и BeautifulSoup

import urllib2
from BeautifulSoup import BeautifulSoup

укажите URL-адрес и получите, используя urllib2

url = 'http://www.piday.org/million.php'
response = urlopen(url)

, а затем используйте BeautifulSoup , который использует теги на странице для создания словаря, а затем вы можете запросить словарь с соответствующими тегами, которые определяют данные, чтобы извлечь то, что вы хотите.

soup = BeautifulSoup(response)

pi = soup.findAll('TAG')

где 'TAG' - это соответствующий тег, который вы хотите найти, который определяет, где находится pi.

Укажите, что вы хотите распечатать

out = '<html><body>'+pi+'</html></body>

Затем вы можете записать это в HTML-файл, который вы обслуживаете, используя встроенные файловые операции pythons.

f = open('file.html', 'w')
f.write(out)
f.close()

Затем вы обслуживаете файл 'file.html', используя ваш веб-сервер.

Если вы не хотите использовать BeautifulSoup, вы можете использовать re и urllib, но это не так красиво, как BeautifulSoup.

1 голос
/ 25 мая 2011

Когда вы публикуете сообщение, это делается с помощью запроса 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-адреса.

0 голосов
/ 24 мая 2011

Вы можете использовать модуль urllib2, входящий в любой дистрибутив Python.

Позволяет открывать URL-адрес, когда вы открываете файл в файловой системе. Таким образом, вы можете получить данные PI с помощью

pi_million_file = urllib2.urlopen("http://www.piday.org/million.php")

проанализируйте полученный файл, который будет HTML-кодом веб-страницы, которую вы видите в своем браузере.

Тогда вы должны использовать правильный URL-адрес для вашего сайта, чтобы отправить с PI.

...