#python #html #python-3.x #class #tags
#python #HTML #python-3.x #класс #Теги
Вопрос:
В настоящее время я очищаю веб-сайт и получаю текст некоторых деталей на веб-странице, которые я пытался идентифицировать с помощью кнопки ‘inspect’ в Google Chrome, и я действительно смог получить нужный текст из обычных текстовых элементов.
Однако у меня есть два вопроса:
1. Мне нужно правильно получить текст, связанный с соответствующим классом div. Как вы можете видеть в приведенном ниже коде, я только что ввел ‘h3’, ‘p’ и ‘abbr’, и я смог фактически получить текст, однако они не относятся конкретно к определенному ‘class’. Я полагаю, что он просто получает первый, с которым сталкивается, вот почему на некоторых веб-страницах я сталкиваюсь с приведенной ниже ошибкой, потому что она указывает на неправильный элемент.
Traceback (most recent call last):
File "C:UsersadminDesktopFolderNameFileName.py", line 18, in <module>
name1 = info2_text.text
AttributeError: 'NoneType' object has no attribute 'text'
Итак, я предполагаю, что мой реальный вопрос № 1 заключается в том, чтобы избежать вышеуказанной ошибки из-за неверно идентифицированных абзацев ‘p’, как в примере ниже, как я могу ввести в код для идентификации в терминах ‘class’? Я уже пробовал 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. посмотрите, поможет ли ответ, опубликованный ниже?
Ответ №1:
Найдите абзац / привязку только в соответствующем 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())
ВЫВОД:
"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'])
ВЫВОД:
Found the URL: sampleurl.com