python - 使用 python 和使用循环或 if 命令进行 Web 抓取
问题描述
我正在网上抓取此网页的信息https://www.bundesbank.de/en/bundesbank/research/research-centre/people/people-738992。 该网页有不同的版块,例如研究负责人,该版块有 12 位研究人员,当您单击一个选项时,您会转到每个研究人员的网页。到目前为止,这是我的代码,我可以网络抓取每个研究人员的内容,但是有没有办法让一个代码(而不是 12 个)来网络抓取研究部门负责人的所有研究人员的信息?我不确定使用“循环”、“while 循环”或“if”命令是否更好地进行网络抓取
from selenium import webdriver
mozilla_path = r"C:\Users\ivrav\Python38\geckodriver.exe"
driver = webdriver.Firefox()
driver.get("https://www.bundesbank.de/en/bundesbank/research/research-centre/people/people-738992")
driver.find_element_by_xpath("""//*[@id="top"]/div/div[3]/div/div/div/div/main/div/div[1]/div/div[1]/nav/ul/li/div/a""").click()
Researcher =driver.find_element_by_class_name("main")
任何帮助/建议将不胜感激。提前致谢!
解决方案
要获取研究中心的信息,请尝试将最后两行更改为:
researchers = driver.find_elements_by_xpath('//h2[.="Research Assistants"]//preceding-sibling::div[@class="collection mb-4"]//a[@class="collection__link"]')
for researcher in researchers:
print(researcher.text, researcher.get_attribute('href'))
输出:
Kartik Anand https://www.bundesbank.de/en/kartik-anand
Sven Blank https://www.bundesbank.de/en/sven-blank
Ana-Maria Dumitru https://www.bundesbank.de/en/ana-maria-dumitru
等等
您现在可以按照每个研究人员的链接到相应的页面,并像往常一样抓取该页面。
推荐阅读
- java - 没有ParameterResolver的JUnit5中BeforeEach,AfterEach的参数化
- android - min-Sdk 除了使用最新 API 的设备外不工作(29)
- sql - SQL:是否有可能过滤两个附加了按时间顺序排列的 CASE 值?
- django - Django 查询集如何通过联合查询集聚合(ArrayAgg)?
- sql - 根据时间范围聚合多行
- python - 使用 Python Geocoder 时总是得到 None 值
- ruby-on-rails - 如何使用删除功能向用户隐藏数据
- java - 如何解决错误:jarfile 无效或损坏
- ios - Objective-C 中的数据序列化(Avro 替代方案)
- java - 在 maven clean install 期间查找不同版本的组件(来自 pom 中定义的)