如何解析锚标记中的文本?

时间:2017-08-28 17:17:09

标签: javascript html beautifulsoup pyqt4 python-3.6

我想解析这个“<a href="javascript:8==99999?popDuelloDialog(2754288):popTeam(2386)">Gnistan</a>”并提取文本。

我试图提取很多,但我不能成功。

我不知道如何使用这种格式构建一个方法“javascript come”:(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])

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

IIUC所需要的只是让BeautifulSoup获取其"javascript"属性中href的所有锚标记。但是,您似乎要使用JavaScript创建要解析的内容,这需要使用seleniumChromeDriver等网络驱动程序。使用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"是否为 in href属性,如果为true则打印标记的文本。

使用selenium和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)