python 使用scrapy刮取数据

wydwbb8l  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(232)

bounty还有4天到期。此问题的答案有资格获得+50声望奖励。parastoo正在寻找一个答案从一个有信誉的来源

我打算刮Pararius.nl作为一个实践与scrapy但当我开始爬行它返回fairlane保护,我怎么能通过它?我需要工具吗?请举一个例子

def parse(self, response):
    url = 'https://www.pararius.nl/{deal_type}/nederland/p-{page}/'

        for deal_type in ['huurwoningen', 'koopwoningen']:
            for i in range(1, 2):
                yield scrapy.Request(url.format(deal_type=deal_type, page=i), callback=self.parse_pages,cookies=self.cookies,
                                     headers=self.h, method='GET', cb_kwargs={'deal_type': deal_type})
    
    
    def parse_pages(self, response, deal_type):
        print(response.url)
        return
rryofs0p

rryofs0p1#

您应该尝试使用Selenium绕过您提到的fairlane保护(如果这是代码的问题)。
首先,安装scrapy-selenium包:

pip install scrapy-selenium

然后,修改Scrapy spider以使用SeleniumRequest而不是常规的Scrapy。

from scrapy_selenium import SeleniumRequest

def start_requests(self):
    url = 'https://www.pararius.nl/{deal_type}/nederland/p-{page}/'

    for deal_type in ['huurwoningen', 'koopwoningen']:
        for i in range(1, 2):
            yield SeleniumRequest(
                url = url.format(deal_type = deal_type, page = i),
                callback = self.parse_pages,
                cookies = self.cookies,
                headers = self.h,
                method = 'GET',
                cb_kwargs = {'deal_type': deal_type},
                wait_time = 3
            )

def parse_pages(self, response, deal_type):
    # Get Selenium web driver from response object
    driver = response.meta['driver']

    # Grab modified response from the web driver
    page_html = driver.page_source
    pageResponseObj = Selector(text = page_html)

    print(response.url)
    return

.start_requests()方法中,我们使用SeleniumRequestwait_time参数为3秒。这告诉Selenium在继续之前等待3秒,给页面时间加载并绕过fairlane保护。

**注意:**我不确定.parse_pages()方法的缩进级别,所以我只是按照我认为它会工作的方式编写代码。另外,我不能正确地测试这段代码,因为它是作为类的一部分编写的,而您没有给予完整的代码以供参考。如果不行就告诉我。

相关问题