社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python访问Menards网站上的特定元素

Jorge Jurado-Garcia • 4 年前 • 1874 次点击  

我目前正在尝试创建一个python脚本,可以进入Menards网站,获取他们所有的产品描述、SKU和价格,然后将它们导入excel文件。这样我就可以用他们的产品创建透视表或做其他事情。目前,我可以通过使用XPath等工具使其工作。但这种方法并不十分健壮,因为它依赖于每个不同网页的特定路径。我想做的是做一些更强大的东西,可以用在我正在看的网站上。 这些是我指的网站。

https://www.menards.com/main/electrical/conduit-conduit-fittings-raceways/conduit/c-6423.htm?queryType=allItems&rid=ipKkIrbnch&shippingOptions_facet=Pickup+at+Store+Eligible'
https://www.menards.com/main/electrical/conduit-conduit-fittings-raceways/conduit-fittings-supports/c-9538.htm queryType=allItems&shippingOptions_facet=Pickup+at+Store+Eligible&sortby=priceAsc'
https://www.menards.com/main/electrical/light-switches-dimmers-outlets/light-switches/c-6324.htm?queryType=allItems&Spec_Color%2FFinishFamily_facet=Ivory&Spec_Color%2FFinishFamily_facet=Light+Almond&Spec_Color%2FFinishFamily_facet=White&shippingOptions_facet=Pickup+at+Store+Eligible&sortby=priceAsc/'

IRW= https://www.menards.com/main/electrical/electrical-wire-cable/indoor-electrical-cable/c-6441.htm?queryType=allItems&rid=HA1P3WveKh&shippingOptions_facet=Pickup+at+Store+Eligible

这是我目前试图找到一个更健壮的设计的代码。

driver.get(website.get('IRW'))
driver.minimize_window()
description = driver.find_elements(By.CSS_SELECTOR, ".search-item")
print(len(description))
for ll in range(0, 1):
    print(description[ll].text)

目前,这段代码只是通过其类名“搜索项”定位网页上的所有元素。它定位了大部分元素等等,但是我得到了很多垃圾和我想要的结果。 下面是代码输出的示例:

> 11 Click here to go to detail page Bestseller 12 Variations Available
> 12 Gauge NM-B Cable with Ground Wire Click to add item "12 Gauge NM-B
> Cable with Ground Wire" to the compare list Compare Click to add item
> "12 Gauge NM-B Cable with Ground Wire" to the compare list Add To List
> Click to add item 12 Gauge NM-B Cable with Ground Wire to your list
> Sku # 3691660 $25.79 You Save $3.19 with Mail-In Rebate More
> Information Shipping CHOOSE VARIATION None

我想避免替换当前字符串,并进行大量循环以获取值,因为所有这些垃圾在每个网页上都不一致。我希望这是一种更好的定位元素的方法。有什么想法吗谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130674
文章 [ 2 ]  |  最新文章 4 年前
Jorge Jurado-Garcia
Reply   •   1 楼
Jorge Jurado-Garcia    4 年前

谢谢你,QHarr,我知道如何使用这个特定的类访问其他类。允许我这样做的代码行如下:

#for description
description = [i.text for i in driver.find_elements(By.CSS_SELECTOR, "#search-items > .search-item .details > a > .row.pt-5.pb-sm-5 > .multilines-3.text-truncate-multilines.xs-single-col-8.col-12 > .font-weight-bold.text-dark")]
print(description)
QHarr
Reply   •   2 楼
QHarr    4 年前

您可以使用css子级 > 和后代 组合符,用于指定具有类的父对象的直接子对象或子对象(分别) search-item ,在一个只分离出感兴趣的HREF的序列中

links = [i.text for i in 
         driver.find_elements_by_css_selector("#search-items > .search-item .details > a")]