2024年最全5 个用 Python 编写非阻塞 web 爬虫的方法_python定时爬虫非阻塞,面试加分小技巧

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Referrers

接下来你需要设置的是引用。 一般的规则是,如果它是一个列表页面或主页,那么你可以设置该国家的 Google 主页网址。 例如,如果我正在爬取 olx.com.pk ,那么我会设置 https://google.com.pk 而不是 https://google.ca。

如果你要抓取各个产品页面,可以在引用中设置相关类别的网址,或者可以找到要抓取的域的反向链接 。 我通常使用 SEMRush 来这么做。针对链接 https://www.olx.com.pk/furniture-home-decor/categories/  通过 SEMRush 会返回如下所示的内容:

如果你点击查看放大的图像,你可以看到一些链接指向我所需的类别。一旦你收集所有这些真实的反向链接,你可以通过复制逻辑 insideget_random_ua()返回随机引用,并将它们用作引用。 如下所示:

headers = {
        'user-agent': user_agent,
        'referer':referer
    }
代理 IP

我不得不强调这一点。如果认真研究,那么你必须使用多个代理 IP 来避免阻塞。 大多数网站会根据你的服务器或主机提供商的静态 IP 来阻止抓取工具。 这些网站使用智能的工具来确定某个 IP 或 IP 池的方式,并简单地阻止它们。 这也是为什么建议购买几个 IP 地址,50-100个至少要避免阻塞。有许多可用的服务,但我对 Shaders(现在称为 OxyLabs )感到满意。 它们虽然很贵,但服务质量很好。 确保你在订购多个 IP 时,要求提供随机 IP 或至少不遵循 1.2.3.4 到 1.2.3.100 等特定模式。站点管理员将很简单的设置 IP 地址不全部为 1.2.3.* 。 就这么简单。

如果你正在使用请求,你可以像下面这样使用它:

r = requests.get('example.com',headers=headers,proxies={'https': proxy_url})

如果你在 Selenium 使用代理 IP ,那么这将有点棘手。

r = requests.**get**('example.com',headers=headers,proxies={'https': proxy_url})
proxy = get_random_proxy().replace('\n', '')
        service_args = [
            '--proxy={0}'.format(proxy),
            '--proxy-type=http',
            '--proxy-auth=user:path'
        ]
        print('Processing..' + url)
        driver = webdriver.PhantomJS(service_args=service_args)

不用说,get_random_proxy() 是返回一个唯一且随机代理的方法,就像上面获得唯一且随机的 UA 和 Referer 一样。

你可以思考一个这样的系统,在系统中你可以设置一个 IP 每天或每小时访问网站频率,如果它超过了,那么它将被放入一个笼子里直到第二天。 我所在的公司设计了一个这样的系统,不仅设置了 IP 访问频率,还记录了哪个 IP 被阻止。 最后,我只是使用代理服务提供者仅替换这些代理。 由于这超出了本文的范围,所以我不会详细介绍它。

Request Headers

到目前为止,事情你都已经做得很好,但是仍然有些狡猾的网站要求你做更多的事情。当你访问页面的时候他们会查找特定的请求响应头信息,如果特定的头信息没有被发现,他们会阻止内容显示或者展示一个虚假的内容。模拟一个你想访问的网站的请求是非常简单的。例如,比如你正准备访问一个 Craigslist URL ,并且想知道哪个头部信息是需要的。进入 Chrome/Firefox 浏览器,检查正在访问的页面,你应该会看到下面这些内容:

如果你点击了图标并查看,你能找到除了 referer 和 user-agent 之外的大量信息。你能一次性全都实现也可以一个个的实现并测试。无论访问哪个网站,我总是去设置这些信息。请确保你不只是复制粘贴这些信息去访问所有网站,因为这些信息通常会因网站不同而改变。

headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_11\_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        'referrer': 'https://google.com',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,\*/\*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'en-US,en;q=0.9',
        'Pragma': 'no-cache',
    }
延时

在请求之间放置一些延迟总是很好的。我使用 numpy.random.choice() 来实现这一目标,该函数将在我想延迟的服务中传递随机数列表:

delays = [7, 4, 6, 2, 10, 19]
delay = np.random.choice(delays)
time.sleep(delay)

如果你还没有使用过 numpy 库,你也可以使用 random.choice 来达到同样的目的。

如果你真的很急,那么你可以并行执行 URL ,我之前在 此文 中解释过了。

结语

Web 爬虫被阻塞的不确定性永远不会变为零,但你总是可以采取一些措施来规避它。我讨论了一些你应该以某种或其他方式在 web 爬虫中实现的策略。

如果你知道其他策略或技巧,请通过分享评论让我获知。一如既往地,期待你的反馈。

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值