2017-08-28 18 views
1

この "<a href="javascript:8==99999?popDuelloDialog(2754288):popTeam(2386)">Gnistan</a>"を解析してテキストを抽出します。アンカータグからテキストを解析する方法は?

私はたくさん抽出しようとしましたが、成功できませんでした。

この形式のメソッドをビルドする方法がわかりません "javascriptには" :(numbers) "が繰り返されていないので、繰り返し部分のみを使用し、本文にテキストを抽出するメソッドが必要です。

私のコードはここにある:

import sys 
from PyQt4.QtGui import QApplication 
from PyQt4.QtCore import QUrl 
from PyQt4.QtWebKit import QWebPage 
import bs4 as bs 
import urllib.request 
import re 
from bs4 import BeautifulSoup 

class Client(QWebPage): 

    def __init__(self, url): 
     self.app = QApplication(sys.argv) 
     QWebPage.__init__(self) 
     self.loadFinished.connect(self.on_page_load) 
     self.mainFrame().load(QUrl(url)) 
     self.app.exec_() 

    def on_page_load(self): 
     self.app.quit() 

url = 'http://www.mackolik.com/Genis-Iddaa-Programi' 
client_response = Client(url) 
source = client_response.mainFrame().toHtml() 
soup = bs.BeautifulSoup(source, 'html.parser') 
#pattern=re.compile(r"javascript:;") 
#js_test = soup.find_all('a', href='javascript') 
hreff=soup.find_all("a","javascript:;") 
#js_test=soup.select('a[href^="javascript:\('(.*?)'\);"]') 
#print(js_test.text) 
#type(href) 
for i in hreff: 
    print(hreff[i]) 
+0

を? –

+0

うん。まず第一に私は "Gnistan"を解析したいと思います。同じページに多くの文章があり、それから私は他の人にも同じ方法を適用します。 –

+0

@タイラーH、あなたは変更してトピック名を一般化しました。私は、同じことを検索しているが、アンカータグのような一般化された言葉からは理解できない人がたくさんいると信じています。あなたの文字列でgoogle "

答えて

0

IIUCすべてあなたがしている必要がありますBeautifulSoupに属性の"javascript"を持つすべてのアンカータグを取得させます。しかし、解析したいコンテンツはJavaScriptで作成されているようですが、それにはseleniumChromeDriverのようなwebdriverが必要です。私たちは、あなたはおそらくしたいコンテンツがHTMLコードにないことがわかりますBeautifulSoupと要求を使用すると、あなたの問題を解決するためのロジックは、このようになります:

from bs4 import BeautifulSoup 
import requests 
url = "http://www.mackolik.com/Genis-Iddaa-Programi" 
data = requests.get(url).text 
soup = BeautifulSoup(data, 'html.parser') 

for tag in soup.findAll('a'): 
    if "javascript" in tag['href']: 
     print(tag.text) 

サブ"javascript"inかどうかをチェックし、上記のコードhref属性を使用し、trueの場合はタグのテキストを出力します。

セレン及びChromeDriverでロジックはほとんど同じですが、私たちは、他の方法を必要とする:あなただけの「Gnistan」を解析する

from selenium import webdriver 

url = "http://www.mackolik.com/Genis-Iddaa-Programi" 
driver = webdriver.Chrome() 
driver.get(url) 

for tag in driver.find_elements_by_tag_name("a"): 
    if "javascript" in tag.get_attribute("href"): 
     print(tag.text) 
+0

@Vinicius Aguiarありがとうございました。それはうまく動作します。今度はコードを編集して素敵な形で印刷します。もう一度ありがとう。あなたのソリューションはスマートです。 –

0
あなたは、私はそれがVBに知っているが、あなたはアイデアを取ることができ、このように行うことができます

...

'look for the begining of <a href 
    Dim xstr As String = "<a href=javascript:8==99999?popDuelloDialog(2754288):popTeam(2386)>Gnistan</a>" 
    Dim xStart As Integer = InStr(xstr, "<a href") 
    If xStart > 0 Then 
     'look for the end 
     Dim AHREF As Integer = InStr(xStart, xstr, ">") + 1 
     'look for </a> 
     Dim endAHREF As Integer = InStr(AHREF, xstr, "</a>") 
     'take what you need 
     Dim Result As String = Mid(xstr, AHREF, endAHREF - AHREF) 


    End If 
+0

You apply here divide and conquer operation. You divided the anchor tag into two piece then subtract from each other then find the parsed text. I will try this method by myself. If I can succeed it i will share it in here. –

+0

yeah exactly. then if you want to do a bunch of them then just remove everything before ""を検索してループを繰り返すほうが簡単です。 –

関連する問題