【问题标题】:Want to scrape all the specific href from the a tag想要从 a 标签中抓取所有特定的 href
【发布时间】:2021-06-12 09:22:16
【问题描述】:

我已经搜索了特定品牌三星,对于这个数量的产品是搜索,我只是想从搜索产品的产品名称中刮掉所有的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")

【问题讨论】:

  • 您遇到了什么错误或者您还需要什么,请提及!
  • 我需要a标签中搜索产品的所有链接
  • 我收到错误:find_elements_by_tag_name() 接受 2 个位置参数,但给出了 3 个

标签: python pandas selenium beautifulsoup


【解决方案1】:

几件事。您正在尝试将 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]')]

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

{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'])

【讨论】:

  • 实际上我需要产品链接,产品名称为字典格式
  • 你可以使用{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]')}
  • 嘿,你能看看这个问题吗:stackoverflow.com/questions/67951309/…
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2012-05-09
  • 2016-04-06
  • 1970-01-01
相关资源
最近更新 更多