Разбор всех ссылок веб-страницы с динамической прокруткой - PullRequest
0 голосов
/ 12 апреля 2019

Я пытался извлечь все ссылки до конца страницы после прокрутки до конца, но после выполнения кода я получаю только несколько ссылок.

Я пробовал код ниже, используя BeautifulSoup, чтобы очистить все ссылки:

from bs4 import BeautifulSoup
import requests

r = requests.get('https://dir.indiamart.com/impcat/paper-dona-machine.html')
soup = BeautifulSoup(r.text,'lxml')

for links in soup.find_all('div',class_='r-cl b-gry'):
    link = links.find('a')
    print(link['href'])

Я хочу извлечь все ссылки до конца после прокрутки вниз страницы.

1 Ответ

0 голосов
/ 13 апреля 2019

Веб-страница, которую вы хотите проанализировать, использует JavaScript для загрузки большего количества контента, когда пользователь прокручивает страницу вниз.BeautifulSoup не может запустить JavaScript, поэтому вы не можете использовать BeautifulSoup в одиночку, чтобы получить все ссылки на странице.

Однако вы можете легко добиться этого, используя Selenium WebDriver (см. этот пост ):

import time
from selenium import webdriver
from bs4 import BeautifulSoup

# specify chrome driver path below
browser = webdriver.Chrome(r'C:\Users\username\Downloads\chromedriver.exe')

browser.get("https://dir.indiamart.com/impcat/paper-dona-machine.html")
time.sleep(1)
body = browser.find_element_by_tag_name("body")

# Get scroll height
last_height = browser.execute_script("return document.body.scrollHeight")
new_height = 0
# scroll until the bottom of the page as been reached
while new_height != last_height:
    last_height = new_height
    # Scroll down to bottom
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # Wait to load page
    time.sleep(0.2)
    # Calculate new scroll height
    new_height = browser.execute_script("return document.body.scrollHeight")

bodyHTML = browser.find_element_by_tag_name("body").get_attribute('innerHTML')

# parse the body using beautiful soup
soup = BeautifulSoup(bodyHTML,'lxml')

# store and print company links
result = []
for links in soup.find_all('div',class_='r-cl b-gry'):
    link = links.find('a')
    print(f"{link.text} - {link['href']}")
    result.append(link['href'])

print(f"{len(result)} links found")

Это откроет окно браузера Chrome, автоматически прокрутит страницу вниз и затем проанализирует HTML-код с BeautifulSoup, как только будет достигнут нижний край страницы.Обратите внимание, что для запуска приведенного выше кода вам необходимо загрузить Chrome WebDriver и указать путь.

Пример вывода:

Goyal Industries - https://www.goyalbrothers.in/
N. S. Enterprises - https://www.indiamart.com/nsenterprise/
Bannariamman Traders - https://www.bannariammantraders.com/
...
NSN Enterprises - https://www.nsnenterprises.net/
Ruby Automation - https://www.indiamart.com/rubyautomation/
Shree Balaji Machinery (Unit Of Shree Balaji... - https://www.balajimachinery.in/
96 links found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...