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

Javascript 如何解析锚定标记中的文本?,javascript,html,beautifulsoup,pyqt4,python-3.6,Javascript,Html,Beautifulsoup,Pyqt4,Python 3.6,我想解析这个“”并提取文本 我试图榨取很多,但没有成功 我不知道如何用这种格式“javascript comes”:(numbers)”构建一个不重复的方法。因此,我需要这样一个方法,它只使用重复部分并提取正文中的文本 我的代码在这里: import sys from PyQt4.QtGui import QApplication from PyQt4.QtCore import QUrl from PyQt4.QtWebKit import QWebPage import bs4 as bs

我想解析这个“
”并提取文本

我试图榨取很多,但没有成功

我不知道如何用这种格式“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
“寻找开始”
Dim xStart为整数=InStr(xstr,“
Dim endAHREF为整数=仪表(AHREF,xstr,“”)
“拿你需要的东西
Dim结果为字符串=Mid(xstr、AHREF、endAHREF-AHREF)
如果结束

你可以这样做,我知道这是用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
“寻找开始”
Dim xStart为整数=InStr(xstr,“
Dim endAHREF为整数=仪表(AHREF,xstr,“”)
“拿你需要的东西
Dim结果为字符串=Mid(xstr、AHREF、endAHREF-AHREF)
如果结束

IIUC您所需要的就是让BeautifulSoup获得所有带有
“javascript”的锚标记"
在它们的
href
属性中。但是,您想要解析的内容似乎是用JavaScript创建的,这需要使用
selenium
和类似
ChromeDriver
的Web驱动程序。使用BeautifulSoup和请求,我们可以看到您可能想要的内容不在html代码中,而r解决您的问题将是:

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)
上面的代码检查
href
属性中的子字符串
“javascript”
是否为
,如果为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)

IIUC您只需要让BeautifulSoup获取所有带有
“javascript”的锚标记
在它们的
href
属性中。但是,您想要解析的内容似乎是用JavaScript创建的,这需要使用
selenium
和类似
ChromeDriver
的Web驱动程序。使用BeautifulSoup和请求,我们可以看到您可能想要的内容不在html代码中,而r解决您的问题将是:

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)
上面的代码检查
href
属性中的子字符串
“javascript”
是否为
,如果为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)

你只想解析“Gnistan”?是的,首先我想解析“Gnistan”,在同一页上,有许多文本我想解析,然后我当然会对其他文本应用相同的方法。@TylerH,您更改并概括了主题名称,这并不会使访问和查找此类问题变得更容易。我相信有很多人搜索相同的内容,但从不从广义的主题中理解ms,例如anchor tag。在google“@A.Kaymakci上搜索更容易,世界上没有人可能需要解析您所解析的字符串。如果有人想知道如何解析字符串,他们不会搜索“如何解析”,而是搜索“如何解析字符串”"。当问题面向更多的人时,它们会更有用。@TylerH你是从软件工程师的角度看待这个问题的,我当然尊重它,但我想告诉你,也有一些像我这样的人,他们不知道所有类型的技术术语,因为标记、锚定标记术语等属于HTML和XML pro编程,打印,因为术语更一般,属于Python。如果我只对Python语言感兴趣,我不必知道HTML等等。你也可以这样看和思考。你只想解析“Gnistan”?是的。首先我想解析“Gnistan”,在同一页上,有许多文本我想解析,然后我当然会对其他文本应用相同的方法。@TylerH,您更改并概括了主题名称,这并不会使访问和查找此类问题变得更容易。我相信有很多人搜索相同的内容,但从不从广义的主题中理解ms,例如anchor tag。在google“@A.Kaymakci上搜索更容易,世界上没有人可能需要解析您所解析的字符串。如果有人想知道如何解析字符串,他们不会搜索“如何解析”,而是搜索“如何解析字符串”"。当问题面向更多的人时,它们会更有用。@TylerH你是从软件工程师的角度看待这个问题的,我当然尊重它,但我想告诉你,也有一些像我这样的人,他们不知道所有类型的技术术语,因为标记、锚定标记术语等属于HTML和XML pro编程、打印,因为术语更一般,属于Python。如果我只对Python语言感兴趣,我不必知道HTML等等。你也可以这样看和思考。你可以在这里应用分治操作。你将锚标记分成两部分,然后相互减去,然后找到解析的文本。我会我自己试试这个方法。如果我能成功,我会在这里分享。是的,没错。然后如果你想做一堆,就在“”之前删除所有内容在你的字符串中,重复循环。你在这里应用分治操作。你将锚定标记分成两部分,然后相互减去,然后找到解析的文本。我将自己尝试这种方法。如果我能成功,我将在这里共享它。是的,没错。如果你想做一堆,那么只需在“”之前删除所有内容即可在你的字符串中,重复循环。谢谢@Vinicius Aguiar。它工作得很好。现在我将编辑代码,然后它将以良好的形式打印出来。再次感谢。你的解决方案很聪明。谢谢@Vinicius Aguiar。它工作得很好。现在我将编辑代码,然后它将发布