Python3: как определить, какой текстовый элемент нужно очистить, и как очистить URL с помощью класса - PullRequest
0 голосов
/ 21 марта 2019

В настоящее время я очищаю веб-сайт и получаю текст некоторых деталей на веб-странице, которые я пытался определить с помощью кнопки «осмотреть» в Google Chrome, и я действительно смог получить нужный текст из обычного текста.elements.

Однако у меня есть два вопроса:

1.Мне нужно правильно получить текст, который связан с правильным классом div. Как вы можете видеть из приведенного ниже кода, я только что ввел 'h3', 'p' и 'abbr', и я действительно смог получитьтекст, однако они не относятся к определенному «классу».Я полагаю, он просто получает первый, с которым сталкивается, поэтому на некоторых веб-страницах я сталкиваюсь с ошибкой ниже, потому что она указывает на неправильный элемент.

  Traceback (most recent call last):
  File "C:\Users\admin\Desktop\FolderName\FileName.py", line 18, in <module>
    name1 = info2_text.text
  AttributeError: 'NoneType' object has no attribute 'text'

Так что я думаю, что мой реальный вопрос # 1 состоит в том, чтобы избежать ошибки выше из-за неправильно идентифицированных параграфов 'p', как в примере ниже, как я могу вставить в код, чтобы идентифицироватьс точки зрения «класса»?Я уже пробовал info2_text = soup.find('p', attrs={'class': '_5rgt _5nk5 _5msi'}), однако я получаю только ошибку выше.

<div class="_5rgt _5nk5 _5msi" style data-gt="{"tn":"*s"}" data-ft="{"tn":"*s"}"> == $0
 <span>
   <p>
     "Sample paragraph"
   </p>

2.Как получить фактический URL из элемента a href? В приведенном ниже примере:

<div class="_52jc _5qc4 _78cz _24u0 _36xo" data-sigil="m-feed-voice-subtitle">
  <a href="sampleurl.com"></a>

Я пытался использовать info4_url = soup.find('a', attrs={'class': '_4g34._5i2i._52we'}), но я могу напечатать 'None' только для этой строки.Или я смотрю не на тот класс div?

Ниже приведен реальный код, который я пытаюсь использовать, и я хочу сделать его как можно более простым.Большое спасибо за вашу помощь!

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
from bs4 import SoupStrainer
import re
import requests

# specify the url
url = 'https://sampleurl.com/'

page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
info1_header = soup.find('h3')
info2_text = soup.find('p')
info3_text = soup.find('abbr')
info4_url = soup.find('a')
# Get the data by getting its text
name = info1_header.text
name1 = info2_text.text
name2 = info3_text.text
#print text
print(name)
print(name1)
print(name2)
print(info4_url)

1 Ответ

0 голосов
/ 21 марта 2019

Найти абзац / якорь только в соответствующем div:

По первому вопросу :

 html = '''<div class="_5rgt _5nk5 _5msi" style data-gt="{"tn":"*s"}" data-ft="{"tn":"*s"}"> == $0
 <span>
   <p>
     "Sample paragraph"
   </p>'''

soup = BeautifulSoup(html, 'html.parser')
parentDiv = soup.find_all("div", class_="_5rgt _5nk5 _5msi")
for elem in parentDiv:
    para = elem.find("p").text
    print(para.strip())

OUTPUT

"Sample paragraph"

По второму вопросу :

html = '''<div class="_52jc _5qc4 _78cz _24u0 _36xo" data-sigil="m-feed-voice-subtitle">
  <a href="sampleurl.com"></a></div>'''

soup = BeautifulSoup(html, 'html.parser')
for anc in soup.find_all('div', class_="_52jc _5qc4 _78cz _24u0 _36xo"):
    anchor = anc.find("a")
    print("Found the URL:", anchor['href'])

OUTPUT

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