Как разобрать ссылку из текста в Python? - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь проанализировать href в теге привязки из текста, я попробовал следующий код

from flask import Flask,render_template
import requests
import re
app = Flask(__name__)
   @app.route('/')
   def products():
      getprd = requests.get('API')
      jsonobj = getprd.text
      produ= getprd.json()
      prd = produ['items'][0]['id']
      htmlcode = produ['items'][0]['description']
      htmlcodetxt =str(htmlcode)
return render_template('productdisp.html', 
prod=jsonobj, prd=prd, htmlcode=htmlcode)


if __name__ =='__main__':
app.run(debug=True)

, и htmlcodetxt содержит текст

<p style="text-align: center;"><strong>Part Number:</strong></p><div style="text-align: center;"><span style="font-size: 16px;">product code</span></div><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>Lumens:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>6600-7200 LM</span><br></p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>CCT:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;">5700K</span><br> </p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>Input Voltage:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>100-277VAC, 50-60Hz</span><br></p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong><strong>Certificates:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>UL, DLC</span><br></p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>Warranty:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>5 Years <br></span></p><hr><p style="text-align: center;"><strong>DOWNLOADS:</strong><br></p><p style="text-align: center;"><br></p><p style="text-align: center;"><strong><a href="https://dl.dropbox.com/s/saa.pdf?dl=1" class="fakeButton">Specification Sheet</a><br></strong><br></p><p><br></p><p style="text-align: center;"><strong><a href="https://dl.dropbox.com/s/ds.png?dl=1" class="fakeButton2">Photometric Data</a><br></strong></p><p style="text-align: center;"><br></p><p style="text-align: center;"><img src="https://ul_png"> <img src="https://300x295_png"> </p><p style="text-align: center;"><br></p>

1 Ответ

0 голосов
/ 16 октября 2018

Одним из способов было бы использовать модуль HTMLParser , подобный этому, для анализа ссылки href из строки htmlcodetxt.

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):

    # Parse the 'anchor' tag.
        if tag == "a":

        # Check the list of defined attributes
            for name, value in attrs:

            # If href is defined, print it.
                if name == "href":
                    print name, "=", value

# Declare it and feed it your HTML content that you want parsed for the href tag.
parser = MyHTMLParser()
parser.feed(htmlcodetxt)

Я не уверен, как работает обработчик вашего приложения,но, возможно, вы могли бы попробовать что-то вроде этого?

from flask import Flask,render_template
import requests
import re
from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == "a":
            for name, value in attrs:
                if name == "href":
                    print name, "=", value


app = Flask(__name__)
   @app.route('/')
   def products():
      getprd = requests.get('API')
      jsonobj = getprd.text
      produ= getprd.json()
      prd = produ['items'][0]['id']
      htmlcode = produ['items'][0]['description']
      htmlcodetxt =str(htmlcode)

      parser = MyHTMLParser()
      parser.feed(htmlcodetxt)

return render_template('productdisp.html',
prod=jsonobj, prd=prd, htmlcode=htmlcode)


if __name__ =='__main__':
app.run(debug=True)

Например, без использования колбы и с использованием примера HTML-кода, который вы разместили, следующее работает и возвращает ожидаемый результат.

#!/usr/bin/python

content = '<p style="text-align: center;"><strong>Part Number:</strong></p><div style="text-align: center;"><span style="font-size: 16px;">product code</span></div><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>Lumens:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>6600-7200 LM</span><br></p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>CCT:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;">5700K</span><br> </p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>Input Voltage:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>100-277VAC, 50-60Hz</span><br></p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong><strong>Certificates:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>UL, DLC</span><br></p><hr><p style="text-align: center;"><span style="font-size: 16px;"><strong>Warranty:</strong></span><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong></strong>5 Years <br></span></p><hr><p style="text-align: center;"><strong>DOWNLOADS:</strong><br></p><p style="text-align: center;"><br></p><p style="text-align: center;"><strong><a href="https://dl.dropbox.com/s/saa.pdf?dl=1" class="fakeButton">Specification Sheet</a><br></strong><br></p><p><br></p><p style="text-align: center;"><strong><a href="https://dl.dropbox.com/s/ds.png?dl=1" class="fakeButton2">Photometric Data</a><br></strong></p><p style="text-align: center;"><br></p><p style="text-align: center;"><img src="https://ul_png"> <img src="https://300x295_png"> </p><p style="text-align: center;"><br></p>'


from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == "a":
            for name, value in attrs:
                if name == "href":
                    print name, "=", value


parser = MyHTMLParser()
parser.feed(content)

Пример вывода:

$ ./html_parse.py 
href = https://dl.dropbox.com/s/saa.pdf?dl=1
href = https://dl.dropbox.com/s/ds.png?dl=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...