如何从此弹出窗口 window 中抓取文本? [Python 和 Scrapy]

How can I scrape the text from this popup window? [Python and Scrapy]

请注意 - 我经验不足,这是我的第一个 'real' 项目。

我会尽我所能解释我的问题,如果某些术语不正确,我们深表歉意。

我正在尝试抓取以下网页 - https://www.eaab.org.za/agent_agency_search?type=Agents&search_agent=+&submit_agent_search=GO

我可以抓取 'Name' 和 'Status',但我还需要在 'Full Details' 弹出窗口中获取一些信息 window。

我注意到单击 'Full Details' 按钮时 URL 保持不变。

下面是我的代码:

import scrapy
from FirstScrape.items import FirstscrapeItem

class FirstSpider(scrapy.Spider):
    name = "spiderman"
    start_urls = [
        
        "https://www.eaab.org.za/agent_agency_search?type=Agents&search_agent=+&submit_agent_search=GO"
        
        ]
    
    def parse(self, response):
        item = FirstscrapeItem()
        item['name'] = response.xpath("//tr[@class='even']/td[1]/text()").get()
        item['status'] = response.xpath("//tr[@class='even']/td[2]/text()").get()
        #first refers to firstname in the popup window
        item['first'] = response.xpath("//div[@class='result-list default']/tbody/tr[2]/td[2]/text()").get()
        
        
        return item

我从终端启动代码并将其导出到 .csv 文件。

不确定这是否有帮助,但这是弹出框/精美框 window:

popup window

我是否需要使用 Selenium 来单击按钮,还是我只是遗漏了什么?任何帮助将不胜感激。

我非常渴望了解更多关于 Python 和抓取的信息。

谢谢。

这是您需要从起始页中提取的URL:

<a href="/listing_detail.php?agents_id=169039" class="agent-detail">Full Detail</a>

要获取弹出窗口的内容-window 打开这个提取的 URL 作为另一个请求。

Full Detail 中您有 href 属性,您需要获取此 url 并发出请求。 也许对你有帮助:

import scrapy
from scrapy.crawler import CrawlerProcess

class FirstSpider(scrapy.Spider):
    name = "spiderman"
    start_urls = [
        
        "https://www.eaab.org.za/agent_agency_search?type=Agents&search_agent=+&submit_agent_search=GO"
        
        ]
    
    def parse(self, response):
                
        all_urls = [i.attrib["href"] for i in response.css(".agent-detail")]
        for url in all_urls:
            yield scrapy.Request(url=f"https://www.eaab.org.za{url}", callback=self.parse_data)
        
    def parse_data(self, response):
        print(response.css("td::text").extract())
        print("-----------------------------------")