当前位置: 首页 > 知识库问答 >
问题:

如何停止元刷新重定向?

丰岳
2023-03-14
[scrapy] DEBUG: Redirecting (meta refresh) to <GET https://www.propertyguru.com.my/distil_r_captcha.html?requestId=9f8ba25c-3673-40d3-bfe2-6e01460be915&httpReferrer=%2Fproperty-for-rent%2F1> from <GET https://www.propertyguru.com.my/property-for-rent/1>
class MySpider(CrawlSpider):

    name = 'myspider'

    start_urls = [
        'https://www.propertyguru.com.my/property-for-rent/1',
    ]

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
    }
    meta = {
        'dont_redirect': True
    }


    def parse(self, response):    
        items = response.css('div.header-container h3.ellipsis a.nav-link::attr(href)').getall()

        if items:
            for item in items:
                if item.startswith('/property-listing/'):
                    yield scrapy.Request(
                        url='https://www.propertyguru.com.my{}'.format(item),
                        method='GET',
                        headers=self.headers,
                        meta=self.meta,
                        callback=self.parse_items
                    )

    def parse_items(self, response):
        from scrapy.shell import inspect_response
        inspect_response(response, self)

更新:我试过那些设置,但它们也不起作用。

custom_settings = {
    'DOWNLOAD_DELAY': 5,
    'DOWNLOAD_TIMEOUT': 360,
    'CONCURRENT_REQUESTS_PER_DOMAIN': 1,
    'CONCURRENT_ITEMS': 1,
    'REDIRECT_MAX_METAREFRESH_DELAY': 200,
    'REDIRECT_MAX_TIMES': 40,
}

共有1个答案

邹毅
2023-03-14

本网站受Distil网络保护。他们正在使用JavaScript来确定你是一个机器人。他们是允许一些请求通过还是根本不允许?你也许能用硒取得一些成功,但根据我的经验,它们最终会流行起来的。该解决方案涉及随机化整个浏览器指纹从屏幕大小和其他一切你能想到的。如果其他人有更多的信息,我会很有兴趣听到它。我不确定对这种东西是否有兴趣。

如果您加载了一个代理,比如charles proxy或其他什么,这样您就可以看到正在进行的一切,那么您就可以查看它们在您身上运行的所有JS。

如果他们让0个请求通过,我会建议使用硒看看你的运气。

#settings.py

HTTP_RETRY_CODES = [404, 303, 304, ???]
RETRY_TIMES = 20

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': None,
}

meta={'dont_redirect': True}

另外,值得注意的是,您可以在中间件的process_response方法下捕获302并让它抛出另一个请求。如果您有一个好的UA列表和IP源,那么这与HTTP重试代码相结合是一种很好的暴力方式。

我建议您试试https://scrapinghub.com/crawlera。他们最近提高了价格,但他们提供良好的IP和检测禁令。如果你需要得到某些信息,这真的是值得的。他们的网络是聪明的,不像大多数IP循环网络便宜得多。他们正在进行试用,这样您就可以验证它是否工作,并且它是由scrapy的开发人员制作的,所以请遵循文档以便于安装

pip install scrapy_crawlera

然后你可以重试所有他们,直到你的旋转器给你一个好的IP,我怀疑你会看到,在短时间内,他们都将被禁止。

 类似资料:
  • 问题内容: 在ajax调用后,我无法停止刷新页面。我已经尝试通过放置e.preventDefault(); 并返回false;同样,但我的页面再次刷新。 我不知道代码或某些问题是什么。请帮助我在ajax调用后停止刷新页面。解决这个问题将对我有很大的帮助。提前致谢。 这是我的代码: 问题答案: ID是否指向表单?如果是,则需要侦听Submit事件而不是单击click。如果您确实需要监听click事件

  • 当我使用按钮尝试使用方法更新Firebase realtime database中的数据时,每当我单击该按钮时,它都会重新创建该活动。Firebase的'set value()'是否自动重新创建活动?如果有,如何防止?

  • 问题内容: 当按下发送按钮而字段中没有任何数据时,如何防止页面刷新? 验证设置工作正常,所有字段均变为红色,但随后页面立即刷新。我对JS的知识比较基础。 我特别认为底部的功能是“不良”。 的HTML JS 问题答案: 您可以阻止表单提交 当然,在该函数中,您可以检查是否有空白字段,如果看起来不正确,将停止提交。 没有jQuery:

  • 问题内容: 我在使用jsoup时遇到问题,我想从URL中获取一个文档,该文档将根据不起作用的元刷新URL重定向到另一个URL,以明确说明我是否输入了名为http://的网站URL www.amerisourcebergendrug.com,它将根据元刷新URL 自动重定向到http://www.amerisourcebergendrug.com/abcdrug/,但我的jsoup仍然坚持使用htt

  • 问题内容: 我正在使用nodejs和mongoose —尝试在嵌套有递归函数和foreach的深层注释中找到特定的注释。有没有一种方法可以停止nodejs forEach?据我了解,每个forEach迭代都是一个函数,并且我不能只执行“ break”,而只能执行“ return”,但这不会停止foreach。 问题答案: 您无法打破。不过,我可以想到三种伪造方法。 1.The Ugly Way :

  • 问题内容: 我有以下代码: MainActivity.java TabsPagerAdapter.java 我正在制作一个图书馆应用程序,其中导航是通过选项卡进行的,问题是每次我从第三个选项卡转到第一个或第一个至第三个时,选项卡的内容都在刷新,我想防止刷新,任何请帮助 ? 问题答案: 默认情况下,在滑动页面时会重新创建片段。为防止这种情况,您可以尝试以下三种方法之一: 1. 在您的片段中,呼叫。