В настоящее время я очищаю веб-сайт и получаю текст некоторых деталей на веб-странице, которые я пытался определить с помощью кнопки «осмотреть» в 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)