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

How to parse the text from an anchor tag?

我想解析这个“<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])

你可以这样做我知道它在 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

IIUC 你需要做的就是让 BeautifulSoup 得到所有在 href 属性中有 "javascript" 的锚标签。但是,您要解析的内容似乎是使用 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 属性,如果为真则打印标签的文本。

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)