2017-08-28 66 views
1

我想解析這個「<a href="javascript:8==99999?popDuelloDialog(2754288):popTeam(2386)">Gnistan</a>」並提取文本。如何解析錨標籤中的文本?

我試圖提取很多,但我無法成功。

我不知道如何建立一個這種格式的方法「javascript comes」:(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

你只是想分析「Gnistan」? –

+0

是的。首先我想解析「Gnistan」,在同一頁面上有很多我想分析的文本,那麼當然我會爲其他人應用相同的方法。 –

+0

@TylerH,你改變並推廣了主題名稱,它不容易達到並找到這樣的問題。我相信有很多人在搜索相同的東西,但從廣義的術語中不能理解,比如錨標籤。在您的字符串中搜索谷歌「

回答

0

IIUC所有你需要的是使BeautifulSoup獲得所有具有"javascript"屬性的錨定標記href屬性。但是,您想要解析的內容似乎是使用JavaScript創建的,而這需要使用selenium以及像ChromeDriver這樣的網絡驅動程序。使用BeautifulSoup和要求,我們可以看到,你可能想要的內容不是在HTML代碼,爲您解決問題的邏輯是這樣的:

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"inhref屬性,如果爲true則打印標籤的文本。

隨着硒和ChromeDriver邏輯是大同小異的,但我們需要其他的方法:

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 "」更容易,然後重複循環。 – 2017-08-28 18:53:23