【问题标题】:Using Selenium css selector to extract data使用 Selenium css 选择器提取数据
【发布时间】:2021-01-18 00:38:14
【问题描述】:

您好,我做了这段代码,它返回给我一个 li 列表,但我想访问里面提到的每个 a 标签并打开它,如果您有任何建议,我将不胜感激

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import pandas as pd
import time

options = Options()

# Creating our dictionary
all_services = pd.DataFrame(columns=['Motif', 'Description'])

path = "C:/Users/Al4D1N/Documents/ChromeDriver_webscraping/chromedriver.exe"
driver = webdriver.Chrome(options=options, executable_path=path)

driver.get("https://www.mairie.net/national/acte-naissance.htm#plus")

list_of_services = driver.find_elements_by_css_selector(".list-images li")

我知道我需要在每个 list_of_services Item 中进行迭代,但我不知道如何打开每个 a 标记,因为它们都没有可以帮助我区分它们的类或 ID

【问题讨论】:

  • 打开每个标签是什么意思?您需要实际的 href 还是只需要标题?
  • 实际上,如果您访问该网站,您会在页面下方看到第二个部分,其中包含多个 hrefs ,我需要打开每个 <a> 标记。在每个打开的链接中,我都必须提取特定数据

标签: python selenium selenium-webdriver


【解决方案1】:

这是提取 href 中所有链接的一种方法。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import pandas as pd
import time

options = Options()

# Creating our dictionary
all_services = pd.DataFrame(columns=['Motif', 'Description'])

path = "C:/Users/Al4D1N/Documents/ChromeDriver_webscraping/chromedriver.exe"
driver = webdriver.Chrome(options=options, executable_path=path)

driver.get("https://www.mairie.net/national/acte-naissance.htm#plus")

#Get all elements in class 'list-images'
list_of_services = driver.find_elements_by_class_name("list-images")

for service in list_of_services:
    #In each element, select the atags
    atags = service.find_elements_by_css_selector('a')
    for atag in atags:
        #In each atag, select the href
        href = atag.get_attribute('href')

输出:

https://www.mairie.net/national/acte-mariage.htm#acte-naissance
https://www.mairie.net/national/acte-deces.htm#acte-naissance
https://www.mairie.net/national/carte-identite.htm#acte-naissance
https://www.mairie.net/national/passeport.htm#acte-naissance
https://www.mairie.net/national/casier-judiciaire.htm#acte-naissance
https://www.mairie.net/national/demande-carte-electorale.htm#acte-naissance
https://www.mairie.net/national/cadastre-plu.htm#acte-naissance
https://www.mairie.net/national/carte-grise-en-ligne-par-internet.htm#acte-naissance
https://www.mairie.net/national/certificat-non-gage.htm#acte-naissance
https://www.mairie.net/national/permis-conduire-delivrance.htm#acte-naissance
https://www.mairie.net/national/changement-adresse.htm#acte-naissance

【讨论】:

  • 如果我想打开每个href并尝试为每个href提取特定数据,例如我转到那里显示的第一个链接并做一些find_elements method,是否有任何替代那 ?或者我需要用driver.get(href) 再次打开?
  • 是的,我认为最好的方法是将所有 href 存储在一个列表中,然后遍历该列表并调用 driver.get(href) 或在新选项卡中打开每个 href。请参阅stackoverflow.com/questions/42814991/… 如何处理不同的选项卡。
  • 对不起,我不明白这个问题。能改一下吗?
  • 啊我没有看到你的堆栈链接,没关系我现在有解决方案,谢谢
猜你喜欢
  • 2019-02-24
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多