如何使用 Python 抓取 javascript 渲染的网站

时间:2021-03-20 15:57:25

标签: javascript python selenium web-scraping

我一直在尝试抓取以下网站:https://sv.siman.com/ 然而,我做网页抓取的经验并没有让我为 Javascript 呈现的网站做好准备。我最初尝试使用 Beautifulsoup,但源代码不包含您在检查页面时获得的 HTML 代码。然后我尝试使用 html_requests,但我并没有走得太远,因为它似乎是随机工作的。这是在一个类别页面中获取产品链接的初始代码:

import asyncio
from requests_html import AsyncHTMLSession

asession = AsyncHTMLSession()

async def get_pythonorg():
  r = await asession.get('https://sv.siman.com/moda/damas/blusas')
  print(r.html.absolute_links)

asyncio.run(get_pythonorg()) 

我通常得到的错误是 asyncio.run() 无法从正在运行的事件循环中调用。但是,有时代码工作正常,我不知道为什么。

我也尝试了 Selenium,但到目前为止我只成功打开了该网站。代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

import pandas as pd 

PATH = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])

driver = webdriver.Chrome(PATH, options=options)
driver.get("https://sv.siman.com/moda/damas/blusas")
button = driver.find_element_by_name("Clubes")
button.click

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.LINK_TEXT, "Clubes"))
    )
    element.click
except:
    driver.quit()

解释完之后,我将知道描述我想要实现的目标。我想自动访问所有产品类别并浏览不同的产品以提取相关信息。我使用 Beautifulsoup 了解此过程的逻辑,并且之前已经构建了功能强大的 scrpaers,但我无法使其正常工作。

0 个答案:

没有答案