为了账号安全,请及时绑定邮箱和手机立即绑定

如何在无序列表 selenium + python 中抓取信息

如何在无序列表 selenium + python 中抓取信息

沧海一幻觉 2022-12-20 14:38:22
我正在做一个网络抓取项目,我试图从亚马逊网站上抓取信息。在网站中,存在包含此类信息的无序列表Item Weight: 17.2 poundsShipping Weight: 17.4 pounds (View shipping rates and policies)ASIN: B00HC767P6UPC: 766789717088 885720483186 052000201628Item model number: mark-1hooi-toop842Customer Reviews: 4.8 out of 5 stars1,352 customer ratingsAmazon Best Sellers Rank: #514 in Grocery & Gourmet Food (See Top 100 in Grocery & Gourmet Food)#12 in Sports Drinks该列表本身没有任何类别。问题是我不想要列表中的所有信息。只有 ASIN 代码。li标签没有任何特定的类或 ID 。这是产品详细信息页面的链接在使用 selenium 之前,我曾与 BeautifulSoup 合作,这就是我解决问题的方式asin = str(soup.find('bdi', {'dir': 'ltr'}).find_parent('li'))[38:].split('<')[0]我现在正在切换到硒。我如何抓取信息。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您可以使用 css 选择器获取相关的 li 项,如下所示:


通过css选择器通过索引查找子元素

$(".content > ul > li:nth-child(2)").textContent >>> "Shipping Weight: 33 pounds (View shipping rates and policies)"

$(".content > ul > li:nth-child(3)").textContent >>> "ASIN: B07QKN2ZT9"

相关的python selenium代码:


driver.find_element_by_css_selector(".content > ul > li:nth-child(3)").text.split(": ")[1] >>> 'B07QKN2ZT9'

通过 XPATH 查找祖先元素

如果 ASIN 并不总是在同一个索引中,那么您可以找到bdi具有文本文本的元素ASIN并找到它,ancestor::li然后获取其文本并提取相关部分。像下面这样:


driver.find_element_by_xpath("//bdi[text()='ASIN']/ancestor::li").text.split(": ")[1] >>> 'B07QKN2ZT9'

生成 XPATH

//<element type>[<attribute type> = <attribute value>]/<descendant>

//bdi[text() = 'ASIN'] >>> bdi element with text 'ASIN'

//bdi[@dir = 'ltr'] >>> bdi element with dir attribute equals to 'ltr'

访问元素的祖先

/ancestor::<ancestor element type>

//bdi[text()='ASIN']/ancestor::li >>> li

//bdi[text()='ASIN']/ancestor::ul >>> ul

//img1.sycdn.imooc.com//63a15882000178b503750160.jpg

你可以检查这个作为参考


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信