Контейнеры webscrape с python

Я пытаюсь скопировать контент из контейнеров на этой веб-странице: https://www.check24.de/handytarife/vergleich?activeForm=sim

Обычно я использую beautifulsoup, но в данном случае я обнаружил, что он не работает для этого сайта. Когда я запускаю свой «суп», я получаю только сведения об архитектуре веб-сайта, а не содержимое контейнеров, доступных на веб-сайте.

page_link = 'check24.de/handytarife/vergleich?activeForm=sim' 
page_response = requests.get(page_link, timeout=5, verify=False, headers={'User-Agent': 'Mozilla/5.0'}) 
soup = BeautifulSoup(page_response.text,'lxml')

Знаете ли вы какую-нибудь хорошую библиотеку Python, способную делать то, что я пытаюсь сделать?

Лучший, Сэм

Поделитесь своим кодом вместе с текущим и желаемым результатом

Andersson 31.10.2018 11:44

page_link = 'check24.de/handytarife/vergleich?activeForm=sim' page_response = requests.get (page_link, timeout = 5, verify = False, headers = {'User-Agent': 'Mozilla / 5.0'}) soup = BeautifulSoup (page_response.text, 'lxml')

sammtt 31.10.2018 11:55

Я хочу получить все товары в каждом из контейнеров на сайте. Например, LTE Special, LTE All 3 GB ...

sammtt 31.10.2018 11:56
requests не может обрабатывать URL без схемы. Это твоя первая проблема. Вторая проблема заключается в том, что запрашиваемая страница не содержит требуемых данных.
Andersson 31.10.2018 12:00

Я не очень понимаю, почему он не содержит требуемых данных?

sammtt 31.10.2018 12:01

потому что все данные поступают из XHR, которые вам нужно запросить с помощью другого GET-запроса. Также «Я хочу собрать все предметы в каждый из контейнеров» не является хорошим описанием "желаемый результат". Какие именно данные вам нужны? Какой формат данных?

Andersson 31.10.2018 12:04

Я хочу получить цены в каждой таре. Пример: первый - 5,07 евро, второй - 7,32 евро и т. д.

sammtt 31.10.2018 12:14
1
7
760
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь запросить только HTML-страницу, которая больше похожа на пустая красивая рамка для необработанных данных. Все данные взяты из XHR

Вы можете получить все данные в формате JSON, как показано ниже:

r = requests.get('https://mobilfunk.check24.de/ajax/result/collection/sim?network_tmobile=yes&network_vodafone=yes&network_o2=yes&data_included=2000&minutes_included=all&select_contract=-24&young_tariff=no&rnp=egal&data_speed=0&lte=no&with_data_tariffs=no&with_high_rejection_rate=all&fixed_traffic_automatic=egal&sms_included=all&tid=CH24_MF_Default').json()

Поскольку вы не сказали, что такое именно тебе нужно соскоблить, вот как вы можете получить все имена:

for item in r['rows']:
    print(item['tariff']['names']['resultlist'])

Как вы нашли ссылку на XHR?

sammtt 01.11.2018 12:43

@sammtt, вы можете нажать F12 -> переключиться на вкладку сети -> выбрать только вложенную вкладку XHR -> обновить страницу ... вы должны увидеть все XHR, которые отправляются во время рендеринга страницы

Andersson 01.11.2018 12:45

спасибо, но я не могу найти ссылку, когда сейчас пытаюсь получить json от check24.de/dsl/vergleich/…

sammtt 01.11.2018 12:50

@sammtt, теперь данные находятся в источнике страницы. В этом запросе вы отправляете все необходимые параметры в первом запросе, поэтому нет необходимости в дополнительных запросах.

Andersson 01.11.2018 12:56

Другие вопросы по теме