Получить данные с веб-сайта и сохранить некоторые изображения и текст в одной переменной? - PullRequest
0 голосов
/ 05 июня 2019

Я работаю над проектом, который получает некоторые данные с веб-страницы, используя библиотеку python BeautifulSoup. Предположим, что есть ответ на Quora, и я хочу сохранить его локально в моей переменной python. Ответ может содержать изображения и текст, так как я могу сохранить их в одной переменной?

Я пытался получить Имя вопроса, Имя автора и некоторые другие, но проблема заключается в ответе.

import requests
from bs4 import BeautifulSoup

print("\nLoading Data..")
result = requests.get("https://qr.ae/TWGJU0")

success = result.status_code
if success==200:
    print("Connection to the webpage was successful..!\n")

src = result.content

soup = BeautifulSoup(src, 'lxml')

question = soup.find("a", attrs={'class': 'question_link'})
print("Question:"+question.text)

author = soup.find("a", attrs={'class': 'user'})
print("Author:"+author.text)

profile = soup.find("a", attrs={'class': 'user'})
print("Author Profile: https://www.quora.com"+profile.attrs['href'])

print("\n")
answer = soup.find("div", attrs={'class':'u-serif-font-main--regular'})
print("Answer:"+answer.text)

Вывод только печатает текстовые данные, я знаю, что это потому, что я использовал 'answer.text', но все же, как я могу заставить это работать?

1 Ответ

0 голосов
/ 05 июня 2019

Чтобы получить изображения, хранящиеся в виде переменной, просто потяните теги <img>. Возможно, есть несколько изображений, поэтому они могут быть сохранены в списке с использованием списка понимания:

import requests
from bs4 import BeautifulSoup

print("\nLoading Data..")
result = requests.get("https://qr.ae/TWGJU0")

success = result.status_code
if success==200:
    print("Connection to the webpage was successful..!\n")

src = result.content

soup = BeautifulSoup(src, 'lxml')

question = soup.find("a", attrs={'class': 'question_link'})
print("Question:"+question.text)

author = soup.find("a", attrs={'class': 'user'})
print("Author:"+author.text)

profile = soup.find("a", attrs={'class': 'user'})
print("Author Profile: https://www.quora.com"+profile.attrs['href'])

print("\n")
answer = soup.find("div", attrs={'class':'u-serif-font-main--regular'})
print("Answer:"+answer.text)

print("\n")
images = [ each['src'] for each in answer.find_all('img') ]
for image in images:
    print ("Images:" + image)

Теперь ваши изображения хранятся в одной переменной:

print (images)
['https://qph.fs.quoracdn.net/main-qimg-1034d14bf757fcbedc38dfdb186413d3']

Или

import requests
from bs4 import BeautifulSoup

print("\nLoading Data..")
result = requests.get("https://qr.ae/TWGJU0")

success = result.status_code
if success==200:
    print("Connection to the webpage was successful..!\n")

src = result.content

soup = BeautifulSoup(src, 'lxml')

question = soup.find("a", attrs={'class': 'question_link'})
print("Question:"+question.text)

author = soup.find("a", attrs={'class': 'user'})
print("Author:"+author.text)

profile = soup.find("a", attrs={'class': 'user'})
print("Author Profile: https://www.quora.com"+profile.attrs['href'])

print("\n")
answer = soup.find("div", attrs={'class':'u-serif-font-main--regular'})


answer_images = []
for sentence in answer.find_all():
    if sentence.name == 'p':
        answer_images.append(sentence.text)
    if sentence.name == 'img':
        answer_images.append(sentence['src'])

answer = ' '.join(answer_images)

print("Answer:"+answer)

Если вы хотите сохранить этот ответ с изображением внутри ответа, вы можете перебирать эти элементы. Оно не будет отображать изображение, если только вы не сделаете еще какие-либо манипуляции, такие как сохранение его в виде html или преобразование URL-адреса в изображение каким-либо образом, используя cv2, или matplot, или какой-либо другой пакет для отображения изображения:

Другой способ:

import requests
from bs4 import BeautifulSoup
from matplotlib import pyplot as plt

print("\nLoading Data..")
result = requests.get("https://qr.ae/TWGJU0")

success = result.status_code
if success==200:
    print("Connection to the webpage was successful..!\n")

src = result.content

soup = BeautifulSoup(src, 'lxml')

question = soup.find("a", attrs={'class': 'question_link'})
print("Question:"+question.text)

author = soup.find("a", attrs={'class': 'user'})
print("Author:"+author.text)

profile = soup.find("a", attrs={'class': 'user'})
print("Author Profile: https://www.quora.com"+profile.attrs['href'])

print("\n")
answer = soup.find("div", attrs={'class':'u-serif-font-main--regular'})


answer_images = []
for sentence in answer.find_all():
    if sentence.name == 'p':
        answer_images.append(sentence.text)
    if sentence.name == 'img':
        answer_images.append(sentence['src'])

for each in answer_images:
    if 'https://' in each:
        a = plt.imread('https://qph.fs.quoracdn.net/main-qimg-1034d14bf757fcbedc38dfdb186413d3')
        plt.axis('off')
        plt.imshow(a)
        plt.show()
    else:
        print (each + ' ')

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...