想要从 a 标签中抓取所有特定的 href

时间:2021-06-12 09:22:16

标签: python pandas selenium beautifulsoup

我搜索了特定品牌三星,对于这么多产品正在搜索,我只是想从带有产品名称的搜索产品中抓取所有href。

enter code here
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.keys import Keys
chrome_path =r'C:/Users/91940/AppData/Local/Programs/Python/Python39/Scripts/chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_path)
driver.implicitly_wait(10)
url = "https://www.lazada.sg"
driver.get(url)
driver.maximize_window()
soup=BeautifulSoup(driver.page_source, 'lxml')
application = driver.find_element_by_id("q")
application.send_keys("Samsung")
driver.find_element_by_css_selector(".search-box__button--1oH7").click()

div = driver.find_elements_by_tag_name('div', {'class': 'GridItem__title___8JShU'})
print(len(div))
for ele in div :
   print(a.get_attribute("href")

1 个答案:

答案 0 :(得分:0)

几件事。您正在尝试将 bs4 语法与导致当前错误的 selenium 混合使用。此外,您的目标是潜在的动态值。最后,还有一些可能会影响您以后工作的防刮擦措施。

忽略最后一个更健壮、语法更合适的版本,可能是:

div = driver.find_elements_by_css_selector('[data-tracking="product-card"]')
links = [i.find_element_by_css_selector('[age="0"]').get_attribute('href') for i in div]
print(links)

您可以使用不同的 css 选择器组合将其简化为列表理解,例如:

links = [i.get_attribute('href') for i in driver.find_elements_by_css_selector('[data-tracking="product-card"] div:nth-child(1) > [href*=search]')]

对于最后一个,您可以返回带有产品名称的字典,如下所示:

{i.find_element_by_tag_name('img').get_attribute('alt'):i.get_attribute('href') for i in driver.find_elements_by_css_selector('[data-tracking="product-card"] div:nth-child(1) > [href*=search]')}

作为数据框:

import pandas as pd

pd.DataFrame([(i.find_element_by_tag_name('img').get_attribute('alt'), i.get_attribute('href')) for i in driver.find_elements_by_css_selector('[data-tracking="product-card"] div:nth-child(1) > [href*=search]')], columns = ['Title', 'Link'])