Как получить веб-страницу для программной загрузки контента, как при ручной прокрутке вниз? - PullRequest
0 голосов
/ 28 июня 2018

Я хочу почистить некоторые новостные ссылки с этого сайта. Для этого мой код таков:

from bs4 import BeautifulSoup
import requests

base = "https://www.philstar.com/business/"
page = requests.get(base)
soup = BeautifulSoup(page.text, "html.parser")

li_box = soup.find_all("href")

links = open("News article links.txt", "w+")

for a in li_box:
    links.write(base+a['href']+"\n")

Проблема в том, что он находит только 15-16 ссылок, отображаемых на целевой странице. Если вы вручную прокрутите вниз до нижней части страницы, вы увидите, что она загружает больше новостей. Прокрутите больше, и он будет загружаться больше, и так далее. Код не может выполнить эту часть «прокрутка вниз, чтобы увидеть больше». Как мне почистить все эти новости (или, скажем, первые 1000)?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вы должны использовать Селен для этого. Я немного изменил ваш код, он даст вам представление, как это сделать.

Попробуйте:

from bs4 import BeautifulSoup
import requests
from selenium import webdriver
import time

browser = webdriver.Chrome('--path--')      # here path of driver if it didn't find it.

base = "https://www.philstar.com/business/"

browser.get(base)

''' to auto scroll page '''
SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = browser.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = browser.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

html_source = browser.page_source
soup = BeautifulSoup(html_source, "html.parser")


li_box = soup.find_all('a')     # here whatever you want to find
print(li_box)

Надеюсь, это поможет вам! :) Спасибо!

0 голосов
/ 28 июня 2018

Для этого случая я, вероятно, рассмотрю возможность использования Селен .

С Selenium вы можете использовать метод прокрутки страницы, который позволит вам моделировать поведение пользователя при прокрутке веб-страницы. Для некоторых указаний смотрите следующее:

http://selenium -python.readthedocs.io / faq.html # как к свитку-вниз-к-снизу из-а-страницы http://blog.varunin.com/2011/08/scrolling-on-pages-using-selenium.html

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