Как мне исправить код, чтобы очистить сайт Zomato? - PullRequest
0 голосов
/ 26 марта 2020

Я написал этот код, но получил это как ошибку «IndexError: список индексов вне диапазона» после выполнения последней строки. Пожалуйста, как мне это исправить?

    import requests
    from bs4 import BeautifulSoup

    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, 
                                           like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
    response = requests.get("https://www.zomato.com/bangalore/top-restaurants",headers=headers)

    content = response.content
    soup = BeautifulSoup(content,"html.parser")

    top_rest = soup.find_all("div",attrs={"class": "sc-bblaLu dOXFUL"})
    list_tr = top_rest[0].find_all("div",attrs={"class": "sc-gTAwTn cKXlHE"})

list_rest =[]
for tr in list_tr:
    dataframe ={}
    dataframe["rest_name"] = (tr.find("div",attrs={"class": "res_title zblack bold nowrap"})).text.replace('\n', ' ')
    dataframe["rest_address"] = (tr.find("div",attrs={"class": "nowrap grey-text fontsize5 ttupper"})).text.replace('\n', ' ')
    dataframe["cuisine_type"] = (tr.find("div",attrs={"class":"nowrap grey-text"})).text.replace('\n', ' ')
    list_rest.append(dataframe)
list_rest

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Использование Web Scraping Language Мне удалось написать это:

GOTO https://www.zomato.com/bangalore/top-restaurants
EXTRACT {'rest_name': '//div[@class="res_title zblack bold nowrap"]', 
         'rest_address': '//div[@class="nowrap grey-text fontsize5 ttupper', 
         'cusine_type': '//div[@class="nowrap grey-text"]'} IN //div[@class="bke1zw-1 eMsYsc"]

Это будет повторять каждый элемент записи с классом bke1zw-1 eMsYsc и получать информацию о каждом ресторане.

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

Вы получаете эту ошибку, потому что top_rest пуст, когда вы пытаетесь получить первый его элемент "top_rest [0]" . Причина в том, что первый класс, на который вы пытаетесь сослаться, имеет динамическое имя. Вы заметите, что если вы обновите sh страницу, то же местоположение этого div не будет называться так же. Поэтому, когда вы пытаетесь очистить, вы получаете пустые результаты.

Альтернативой может быть очистка ВСЕХ div, а затем сужение нужных элементов, помните о динамической c схеме именования div, поэтому из одного запроса к другому вы получите другие результаты:

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
response = requests.get("https://www.zomato.com/bangalore/top-restaurants",headers=headers)

content = response.content
soup = BeautifulSoup(content,"html.parser")

top_rest = soup.find_all("div")
list_tr = top_rest[0].find_all("div",attrs={"class": "bke1zw-1 eMsYsc"})
list_tr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...