2014-01-15 4 views
0

Я хочу получить ответы от онлайн-чата. http://talkingbox.dyndns.org:49495/braintalk? (? Принадлежит ссылке)Веб-скребок с вложенными кадрами и javascript

Чтобы задать вопрос нужно просто отправить простой запрос:

http://talkingbox.dyndns.org:49495/in?id=3B9054BC032E53EF691A9A1803040F1C&msg=[Here the question] 

Источник выглядит следующим образом:

<frameset cols="*,185" frameborder="no" border="0" framespacing="0"> 
<frameset rows="100,*,82" frameborder="no" border="0" framespacing="0"> 
    <frame src="http://thebot.de/bt_banner.html" marginwidth="0" name="frtop" scrolling="no" marginheight="0" frameborder="no"> 
    <frame src="out?id=3B9054BC032E53EF691A9A1803040F1C" name="frout" marginwidth="0" marginheight="0"> 
    <frameset rows="100%,*" border="0" framespacing="0" frameborder="no"> 
     <frame src="bt_in?id=3B9054BC032E53EF691A9A1803040F1C" name="frin" scrolling="no" marginwidth="0" marginheight="0" noresize> 
     <frame src="" name="frempty" marginwidth="0" marginheight="0" scrolling="auto" frameborder="no" > 
    </frameset> 
</frameset> 
<frameset frameborder="no" border="0" framespacing="0" rows="82,*"> 
    <frame src="stats?" name="fr1" scrolling="no" marginwidth="0" marginheight="0" frameborder="no"> 
    <frame src="http://thebot.de/bt_rechts.html" name="fr2" scrolling="auto" marginwidth="0" marginheight="0" frameborder="no" > 
</frameset> 
</frameset> 

Я использовал «механизировать» и beautifulsoup для веб-соскабливания, но я полагаю, что механизация не поддерживает динамические веб-страницы.

Как я могу получить ответы в этом случае?

Я также ищу решение, которое хорошо работает в Windows и Linux.

+0

Вы можете попробовать selenuim, который хорош в автоматизации браузера, а также его привязку для phantomjs (который предоставляет JS API для безгласного Webkit, Webkit - это механизм рендеринга). http://www.realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/#.UtYORpDtn4w –

+0

Что такое динамическая веб-страница? эти рамки знают только http-запросы, также ссылка, которую вы поделили, недоступна –

+0

Ссылка мертва. –

ответ

0

Я хотел бы использовать Requests для задачи вроде этого.

import requests 

r = requests.get("http://talkingbox.dyndns.org:49495/in?id=3B9054BC032E53EF691A9A1803040F1C&msg=" + your_question) 

Для веб-страниц, которые не содержат динамическое содержимое, r.text является то, что вы хотите.

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

1

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

, например, с помощью Scrapy это может выглядеть примерно так:

class TheBotSpider(BaseSpider): 
    name = 'thebot' 
    allowed_domains = ['thebot.de', 'talkingbox.dyndns.org'] 

    def __init__(self, *a, **kw): 
     super(TheBotSpider, self).__init__(*a, **kw) 
     self.domain = 'http://talkingbox.dyndns.org:49495/' 
     self.start_urls = [self.domain + 
          'in?id=3B9054BC032E53EF691A9A1803040F1C&msg=' + 
          self.question] 

    def parse(self, response): 
     sel = Selector(response) 
     url = sel.xpath('//frame[@name="frout"]/@src').extract()[0] 
     yield Request(url=url, callback=dynamic_page) 

    def dynamic_page(self, response): 
     .... xpath to scrape answer 

запустить его с вопросом в качестве аргумента:

scrapy crawl thebot -a question=[Here the question] 

для получения более подробной информации о том, как использовать SCRAPY см scrapy tutorial

Смежные вопросы