【发布时间】:2020-04-25 10:23:02
【问题描述】:
简要背景,我两周前开始使用 Python,所以请不要犹豫,纠正您看到的任何错误或改进。我正在尝试从网站 www.fff.fr 的结果俱乐部列表中抓取数据。
我的组织方式是:
- 进入首页
- 接受 Cookie
- 使用城市名称搜索栏
- 获取结果列表
- 关注结果页面的每个网址
- 转到每个“员工”子部分
- 从此页面提取数据
我开始构建下面的 python 代码,但到目前为止还没有工作。我真的很想获得有关如何使其真正发挥作用的反馈。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from shutil import which
chrome_path = which("chromedriver")
driver = webdriver.Chrome(executable_path=chrome_path)
driver.get("https://fff.fr")
cookie_btn = driver.find_element_by_id("didomi-notice-agree-button")
cookie_btn.click()
search_input = driver.find_element_by_xpath("/html//form[@id='proximiteSearch']//input[@id='fff_club_form_club_near_to_search_address']")
search_input.send_keys("Paris")
search_input.send_keys(Keys.ENTER)
self.html = driver.page_source
driver.close()
def parse(self, response):
resp = Selector(text=self.html)
clubs = resp.xpath("(//ul[contains(@id, 'listresulclub')])/li/text()")
for club in clubs:
name = club.xpath(".//text()").get()
name_link = club.xpath(".//@href").get()
url = f"https://www.ffr.fr{name_link}"
absolute_url = url[:-10] + "/le-staff"
# absolute_url = response.urljoin()
yield scrapy.Request(url=absolute_url, meta={'club_name':name})
#yield response.follow (url = name_link, callback=self.parse_country, meta={'club_name': name})
def parse_country(self, response):
name = response.request.meta['club_name']
contacts = response.xpath("//div[@class='coor-block-content']/ol")
for contact in contacts:
contact_nom = contact.xpath(".//li[1]/text()").get()
yield {
'club_name': name,
'correspondant_nom': contact_nom
}
【问题讨论】:
-
请具体说明什么不工作。以上哪些步骤有效?
-
我只是给你一些提示。在我看来,硒是要走的路。当自动化某事或尝试提取数据时,您必须考虑如果您手动执行它会做什么。尝试拆分主要功能中的任务,以便您可以一一测试以检查您是否得到想要的东西。这种方式更容易找到您的错误并在以后更新它们。继续努力!
-
此外,这两个函数都不会在您提供的代码中调用/使用,因此您的部分代码不会被执行。也许尝试在
driver.close()下面做parse(self.html)?
标签: python selenium web-scraping scrapy