BeautifulSoup печатает нумерацию страниц вместе с именами - PullRequest
0 голосов
/ 09 марта 2020

Ссылка: https://www.yelp.com/search?cflt=restaurants&find_loc=San+Francisco%2C+CA

Я соскребаю имена с сайта yelp.com, но также печатаю номера страниц ниже. Как я могу настроить таргетинг только на имена, используя BeautifulSoup? Я делюсь парой скриншотов. Как настроить таргетинг на атрибут name, показанный на скриншоте элемента inspect?

import requests 
from bs4 import BeautifulSoup as bs

url = "https://www.yelp.com/search?cflt=restaurants&find_loc=San+Francisco%2C+CA"

yelp_r = requests.get(url)
yelp_soup = bs(yelp_r.text, "html.parser")
# print(yelp_soup.prettify())

for name in yelp_soup.find_all("a", {"class": "lemon--a__373c0__IEZFH link__373c0__1G70M link-color--inherit__373c0__3dzpk link-size--inherit__373c0__1VFlE"}):

    print(name.text)

enter image description hereenter image description here

Ответы [ 2 ]

2 голосов
/ 09 марта 2020
import requests 
from bs4 import BeautifulSoup as bs

url = "https://www.yelp.com/search?cflt=restaurants&find_loc=San+Francisco%2C+CA"

yelp_r = requests.get(url)
yelp_soup = bs(yelp_r.text, "html.parser")

ul = yelp_soup.find('ul', {'class':'lemon--ul__373c0__1_cxs undefined list__373c0__2G8oH'})
for li in ul.find_all('li', {'class':'lemon--li__373c0__1r9wz border-color--default__373c0__3-ifU'}):
    for a_tag in li.find_all("a", {'class':"lemon--a__373c0__IEZFH link__373c0__1G70M link-color--inherit__373c0__3dzpk link-size--inherit__373c0__1VFlE"}):
        print(a_tag.text) # get the text
        print(a_tag.get('name')) # get the name property of a tag

output

Boo Koo
Boo Koo
Fog Harbor Fish House
Fog Harbor Fish House

... some results remove

Gary Danko
Gary Danko
um.ma
um.ma

Примечание. Я не исследовал, является ли имя класса Dynami c и изменяется ли

0 голосов
/ 09 марта 2020

Я проверю содержимое каждого тега и проверим, нет ли в нем ключевого слова Page.

import requests 
from bs4 import BeautifulSoup as bs

url = "https://www.yelp.com/search?cflt=restaurants&find_loc=San+Francisco%2C+CA"

yelp_r = requests.get(url)
yelp_soup = bs(yelp_r.text, "html.parser")
#print(yelp_soup.prettify())

for name in yelp_soup.find_all("a", {"class": "lemon--a__373c0__IEZFH link__373c0__1G70M link-color--inherit__373c0__3dzpk link-size--inherit__373c0__1VFlE"}):
    if 'Page:' not in str(name.contents[0]):
        print(name.contents[0])

Result:

San Francisco, CA
Restaurants
Boo Koo
...
Palm House
Anchor Oyster Bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...