用硒和 BS4 进行刮擦

问题描述 投票:0回答:1

我正在尝试从这个网站上删除一张桌子作为练习 - https://stats.paj.gr.jp/en/pub/current_en_n2.html

这里的问题是,我无法打印完整的表格。这仅从表中返回 1 个单元格。感谢任何好心人可以提供一些指导。

我的代码如下

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from bs4 import BeautifulSoup
import pandas as pd

path = "C:\\Users\Jun Hui\\Desktop\\Quant Trading\\chromedriver-win32\\chromedriver.exe"

service = webdriver.chrome.service.Service(path)
service.start()

url = "https://stats.paj.gr.jp/en/pub/current_en_n2.html"
driver = webdriver.Chrome(service=service)
driver.get(url)

link_element1 = driver.find_element(By.XPATH,"//a[@href='index.html']")
link_element1.click()
link_element2 = driver.find_element(By.XPATH,"//a[@href='./current_en_n2.html']")
link_element2.click()

page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

table = soup.find("table")
rows = table.find_all("tr")
for row in rows:
    cells = row.find_all("td")
    for cell in cells:
        print(cell.text.strip(), end="\t")
    print()
python selenium-webdriver web-scraping beautifulsoup
1个回答
0
投票

有时,当您请求页面信息时,表格尚未加载。您应该使用等待策略来尽量减少这种情况的发生

例如,您检查表格元素的可见性(意味着表格存在),然后对于该表格元素,您找到带有标签 tr 的元素,它应该返回表格行元素的列表。然后循环遍历并从中提取您需要的信息

table = wait.Until(ExpectedConditions.ElementIsVisible(By.ClassName("table-class-name")));

table_rows = Table.findElements(By.tagName("tr"))

for row in table_rows:
 #loop through table row to extract data

只是为了了解如何实施它的粗略想法

© www.soinside.com 2019 - 2024. All rights reserved.