#python #python-3.x #text #beautifulsoup #urllib
#python #python-3.x #текст #beautifulsoup #urllib
Вопрос:
Я пытаюсь соскрести адрес из приведенной ниже ссылки:
https://www.yelp.com/biz/rollin-phatties-houston
Но я получаю только первое значение адреса (т. Е.: 1731 Westheimer Rd
) Из полного адреса, который разделяется запятой:
1731 Westheimer Rd, Houston, TX 77098
Кто-нибудь может мне помочь с этим, пожалуйста, найдите мой код ниже:
import bs4 as bs
import urllib.request as url
source = url.urlopen('https://www.yelp.com/biz/rollin-phatties-houston')
soup = bs.BeautifulSoup(source, 'html.parser')
mains = soup.find_all("div", {"class": "secondaryAttributes__09f24__3db5x arrange-unit__09f24__1gZC1 border-color--default__09f24__R1nRO"})
main = mains[0] #First item of mains
address = []
for main in mains:
try:
address.append(main.address.find("p").text)
except:
address.append("")
print(address)
# 1731 Westheimer Rd
Я хочу получить результат из тега p, а ниже приведены две детали тега p:
Примечание: я хочу добавить адрес в список.
<p class="lemon--p__373c0__3Qnnj text__373c0__2Kxyz text-color--subtle__373c0__3DZpi text-align--left__373c0__2XGa-">1731 Westheimer Rd, Houston, TX 77098</p>
<p class="lemon--p__373c0__3Qnnj text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B"><a class="lemon--a__373c0__IEZFH link__373c0__1G70M link-color--blue-dark__373c0__85-Nu link-size--inherit__373c0__1VFlE" href="/map/rollin-phatties-houston" target="" name="" rel="" role="link">Get Directions</a><p class="lemon--p__373c0__3Qnnj text__373c0__2Kxyz text-color--subtle__373c0__3DZpi text-align--left__373c0__2XGa-">1731 Westheimer Rd, Houston, TX 77098</p></p>
Для получения более подробной информации вы можете перейти по ссылке: https://www.yelp.com/biz/rollin-phatties-houston
Ответ №1:
Страница страницы загружается динамически, поэтому urllib.request
не поддерживает ее. Тем не менее, данные доступны в формате JSON на странице, которые вы можете искать с помощью встроенного re
модуля и извлекать их с помощью встроенного json
модуля.
import re
import json
import bs4 as bs
import urllib.request as url
source = url.urlopen("https://www.yelp.com/biz/rollin-phatties-houston")
soup = bs.BeautifulSoup(source, "html.parser")
data = soup.select_one(
"#wrap > div.main-content-wrap.main-content-wrap--full > yelp-react-root > script"
).string
json_data = json.loads(re.search(r"({.*})", data).group(1))
print(json_data["bizDetailsPageProps"]["bizContactInfoProps"]["businessAddress"])
Вывод:
1731 Westheimer Rd, Houston, TX 77098
Комментарии:
1. Спасибо за ваш ответ! На самом деле, я хочу добавить их в список. Но я не могу добавить их в список. Не могли бы вы помочь в этом: address = [] для main в mains: попробуйте: data = soup.select_one(«#wrap > div.main-content-wrap.main-content-wrap—full > yelp-react-root > script»).string json_data = json.loads(re.search(r»({.*})», data).group(1)) new_data = json_data[«bizDetailsPageProps»][«bizContactInfoProps»][«businessAddress»] адрес.добавить (new_data) кроме: address.append(«»)
2. @Goutam от меня
mains
пуст. Не уверен, как у вас это получилось, может быть, у вас опечатка в сообщении с именем класса?3. Спасибо за ваш ответ. Пожалуйста, найдите ссылку на GitHub: github.com/goutamborthakur555 /… (Я на самом деле хочу, чтобы данные «business_address» должны состоять из всего адреса. Пожалуйста, помогите мне с этим.)
4. @Goutam Это совершенно новый вопрос. Если этот ответ решил вашу проблему, подумайте о том, чтобы пометить его как принятый. И подумайте о том, чтобы задать новый вопрос здесь, на SO.
5. Спасибо. Позвольте мне задать новый вопрос.