53

プログラミングに不慣れで、Seleniumを使用して移動する必要がある場所に移動する方法を理解しました。今すぐデータを解析したいのですが、どこから始めればよいのかわかりません。誰かが私の手を少し握って正しい方向に向けることができますか?

助けていただければ幸いです-

4

3 に答える 3

148

解析したいページにいると仮定すると、SeleniumはソースHTMLをドライバーのpage_source属性に格納します。次に、を次のようにロードpage_sourceBeautifulSoupます。

In [8]: from bs4 import BeautifulSoup

In [9]: from selenium import webdriver

In [10]: driver = webdriver.Firefox()

In [11]: driver.get('http://news.ycombinator.com')

In [12]: html = driver.page_source

In [13]: soup = BeautifulSoup(html)

In [14]: for tag in soup.find_all('title'):
   ....:     print tag.text
   ....:     
   ....:     
Hacker News
于 2012-12-19T20:19:41.557 に答える
19

あなたの質問は特に具体的ではないので、ここに簡単な例があります。より便利なことを行うには、BSドキュメントをお読みください。また、ここSOには、セレン(およびBS)の使用例がたくさんあります。

from selenium import webdriver
from bs4 import BeautifulSoup

browser=webdriver.Firefox()
browser.get('http://webpage.com')

soup=BeautifulSoup(browser.page_source)

#do something useful
#prints all the links with corresponding text

for link in soup.find_all('a'):
    print link.get('href',None),link.get_text()
于 2012-12-19T20:18:28.107 に答える
2

Seleniumを使用してもよろしいですか?このため、私はPyQt4を使用しました。これは非常に強力で、好きなことを行うことができます。

先ほど書いたサンプルコードを提供します。URLを変更するだけで、次のようになります。

#! /usr/bin/env python2.7

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from bs4 import BeautifulSoup
import sys, signal

class Browser(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.loadProgress.connect(self._progress)
        self.loadFinished.connect(self._loadFinished)
        self.frame = self.page().currentFrame()

    def _progress(self, progress):
        print str(progress) + "%"

    def _loadFinished(self):
        print "Load Finished"
        html = unicode(self.frame.toHtml()).encode('utf-8')
        soup = BeautifulSoup(html)
        print soup.prettify()
        self.close()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    br = Browser()
    url = QUrl('http://web site that can contain javascript.com')
    br.load(url)
    br.show()
    if signal.signal(signal.SIGINT, signal.SIG_DFL):
        sys.exit(app.exec_())
    app.exec_()
于 2012-12-19T20:14:04.163 に答える