【发布时间】:2021-07-28 01:00:13
【问题描述】:
我正在尝试抓取 lowes.com 产品详细信息,这是我正在尝试运行的脚本
from bs4 import BeautifulSoup
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option('prefs', {
'geolocation': True
})
#driver = webdriver.Chrome(ChromeDriverManager().install(),options=chrome_options)
#driver.execute_cdp_cmd("Page.setGeolocationOverride", {
# "latitude": 34.052235,
# "longitude": -118.243683,
# "accuracy": 98
#})
driver.get("https://www.lowes.com/pd/Therma-Tru-Benchmark-Doors-Craftsman-Simulated-Divided-Light-Right-Hand-Inswing-Ready-To-Paint-Fiberglass-Prehung-Entry-Door-with-Insulating-Core-Common-36-in-x-80-in-Actual-37-5-in-x-81-5-in/1000157897")
driver.execute_script("window.scrollTo(0,document.body.scrollHeight/5)")
time.sleep(1)
driver.execute_script("window.scrollTo(0,(document.body.scrollHeight/5)*2)")
time.sleep(1)
driver.execute_script("window.scrollTo(0,(document.body.scrollHeight/5)*3)")
time.sleep(1)
driver.execute_script("window.scrollTo(0,(document.body.scrollHeight/5)*4)")
time.sleep(1)
driver.execute_script("window.scrollTo(0,(document.body.scrollHeight/5)*5)")
time.sleep(1)
content = driver.page_source
soup = BeautifulSoup(content,'html.parser')
imgs = soup.findAll("img", attrs={"class":"met-epc-item"})
for img in imgs:
print(img.get("src"))
print("Price: "+soup.find("span", attrs={"class":"aPrice large"}).text)
brand = soup.find("a", attrs={"class":"Link__LinkStyled-RC__sc-b3hjw8-0 bYfcYt"})
print("brand url: "+ brand.get("href"))
print("brand name: "+ brand.get("text"))
print("brand desc: "+soup.find("h1", attrs={"class":"style__HeaderStyle-PDP__y7vp5g-12 iMECxW"}).text)
driver.close()
当我尝试执行此脚本时,价格元素会导致该元素不存在的错误,当我查看使用 selenium 打开的 chrome 实例中的页面时,我发现价格没有出现,并且一个文本框要求输入邮政编码或城市或州以显示价格和可用性,当尝试输入任何邮政编码或城市或州时没有发生任何事情,当我尝试刷新或在lowes网站中输入任何其他URL时,它说访问被拒绝并重新输入lowes需要的任何其他URL使用 selemnium 打开新的 chrome 实例。有什么建议可以解决这个问题并正确刮掉产品吗?我还想说明一下,当我从我的普通浏览器 chrome 打开网站时,它会正确打开,显示价格,而不是像我们一样拒绝任何访问
【问题讨论】:
标签: python selenium web-scraping beautifulsoup