Я собираю данные с японского веб-сайта электронной коммерции Rakuten. Я использую request-html и Beautiful soup. И проблема в том, что когда я запрашиваю со своего локального компьютера (127.0.0.1), он работает нормально. Но когда ...

0
Rakibul Islam 4 Мар 2021 в 13:43

1 ответ

Лучший ответ

Я пробовал ваш код на EC2 в ap-northeast-1 (Токио) и получаю образец вывода.

enter image description here

Итак, вот несколько вещей, которые нужно проверить:

  • убедитесь, что на вашем EC2 открыты правильные порты
  • дважды проверьте заголовки (я немного изменил ваш - см. код ниже)
  • проверьте ввод запроса; может быть, некоторые из них деформированы?
  • не забрасывайте сервер rakuten слишком большим количеством запросов от одного EC2; может они тебя уже блокируют

Вот ваш код после небольшой настройки:

from bs4 import BeautifulSoup
from requests_html import HTMLSession


def get_search_url(query_keyword):
    base_url = 'https://search.rakuten.co.jp/search/mall/'
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
        'referer': 'https://www.rakuten.co.jp/'
    }
    session = HTMLSession()
    session.headers.update(headers)
    return BeautifulSoup(session.get(base_url + query_keyword).content, "lxml")


def feature_product_details(url):
    output_list = []
    for i in url.find_all("div", attrs={"class": "dui-card searchresultitem"}):
        product_title = i.find("div", attrs={"class": "content title"})
        if product_title is not None:
            product_title = product_title.getText()
        else:
            product_title = ""
        output_list.append({'title': product_title})
    return output_list


def main_rakuten_product_search(query):
    return feature_product_details(get_search_url(query))


if __name__ == '__main__':
    queries = '【レビュー特典中】スマートキー 電波遮断ケース 電波遮断ボックス リレーアタック防止用 キーケース '
    print(main_rakuten_product_search(queries))
2
baduker 4 Мар 2021 в 13:45