BeautifulSoup find_all () ничего не возвращает [] - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь очистить эту страницу всех предложений и хочу перебрать <p class="white-strip">, но page_soup.find_all("p", "white-strip") возвращает пустой список [].

Мой код такfar-

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://www.sbicard.com/en/personal/offers.page#all-offers'

# Opening up connection, grabbing the page
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

# html parsing
page_soup = soup(page_html, "lxml")

Редактировать: Я работал с использованием Selenium, и ниже приведен код, который я использовал.Однако я не могу понять другой метод, с помощью которого можно сделать то же самое.

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome("C:\chromedriver_win32\chromedriver.exe")
driver.get('https://www.sbicard.com/en/personal/offers.page#all-offers')

# html parsing
page_soup = BeautifulSoup(driver.page_source, 'lxml')

# grabs each offer
containers = page_soup.find_all("p", {'class':"white-strip"})

filename = "offers.csv"
f = open(filename, "w")

header = "offer-list\n"

f.write(header)

for container in containers:
    offer = container.span.text
    f.write(offer + "\n")

f.close()
driver.close()

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Если вы ищете какой-либо из элементов, вы можете найти их в теге скрипта, содержащем var offerData. Чтобы получить нужный контент из этого скрипта, вы можете попробовать следующее.

import re
import json
import requests

url = "https://www.sbicard.com/en/personal/offers.page#all-offers"

res = requests.get(url)
p = re.compile(r"var offerData=(.*?);",re.DOTALL)
script = p.findall(res.text)[0].strip()
items = json.loads(script)
for item in items['offers']['offer']:
    print(item['text'])

Вывод как:

Upto Rs 8000 off on flights at Yatra
Electricity Bill payment – Phonepe Offer
25% off on online food ordering
Get 5% cashback at Best Price stores
Get 5% cashback
1 голос
/ 05 июня 2019

веб-сайт - данные запроса динамического рендеринга.Вы должны попробовать автоматизацию библиотеки селена.он позволяет вам отбирать данные страницы запроса динамического рендеринга (js или ajax).

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome("/usr/bin/chromedriver")
driver.get('https://www.sbicard.com/en/personal/offers.page#all-offers')

page_soup = BeautifulSoup(driver.page_source, 'lxml')
p_list = page_soup.find_all("p", {'class':"white-strip"})

print(p_list)

, где '/usr/bin/chromedriver' путь к веб-драйверу selenium.

Загрузить веб-драйвер для селена для браузера Chrome:

http://chromedriver.chromium.org/downloads

Установить веб-драйвер для браузера Chrome:

https://christopher.su/2015/selenium-chromedriver-ubuntu/

Учебник Selenium:

https://selenium -python.readthedocs.io /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...